Ich weiß, dass die offensichtliche Antwort darin besteht, virtualenv und virtualenvwrapper zu verwenden, aber aus verschiedenen Gründen kann / will ich das nicht.
Wie ändere ich den Befehl?
pip install package_name
pip
um das Paket an einem anderen Ort als dem Standard zu installieren site-packages
?
pip
versuchen Sie NICHT, eine ältere Version aus einem nicht benutzerdefinierten Verzeichnis zu entfernen. Zum Beispiel - ein systemweites, bei dem Sie keine Schreibberechtigungen haben. Bisher habe ich das nur miteasy_install
...--ignore-installed
Option sollte verhindern, dass pip versucht, bereits installierte Pakete zu deinstallieren.mkvirtualenv --python=/usr/bin/python3.5 env_name
Antworten:
Verwenden:
Möglicherweise möchten Sie auch verwenden
--ignore-installed
, um die Neuinstallation aller Abhängigkeiten mit diesem neuen Präfix zu erzwingen. Sie können--install-option
mehrmals verwenden, um eine der Optionen hinzuzufügen, mit denen Sie verwenden könnenpython setup.py install
(--prefix
wahrscheinlich möchten Sie, aber es gibt eine Reihe weiterer Optionen, die Sie verwenden können).quelle
pip freeze
das alternative Verzeichnis anzuzeigen?PYTHONPATH=$PREFIX_PATH/lib/python2.6/site-packages pip freeze
solltest du sie sehen.--prefix=$PREFIX_PATH
scheint keine vollständige Kontrolle über das Installationsverzeichnis zu ermöglichen, da ein systemspezifisches Suffix daran angehängt wird (\Lib\site-packages
z. B. unter Windows). Gibt es eine Möglichkeit, ein bestimmtes Verzeichnis anzugeben?Der Schalter --target ist genau das, wonach Sie suchen:
Sie müssen jedoch noch etwas hinzufügen
d:\somewhere\other\than\the\default
,PYTHONPATH
um sie tatsächlich von diesem Speicherort aus verwenden zu können.Aktualisieren Sie pip, wenn der Zielschalter nicht verfügbar ist:
Unter Linux oder OS X:
Unter Windows (dies umgeht ein Problem ):
quelle
pip install --upgrade pip
!--install-option="--prefix=$PREFIX_PATH"
@Ian Bicking und der--target=$PATH
Option?target
ist eine Pip-Option, und alles, was Sie eingeben,install-option
wird an die weitergeleitetsetup.py install command
. Grundsätzlichtarget
ist benutzerdefinierte Site-Pakete Speicherort.--target
kann zu einer Teilinstallation führen, da keine Skripte / Datendateien im angegebenen Präfix installiert werden. Es scheint, als wäre das Übergeben--prefix
mit--install-option
der einzig richtige Weg, um die volle Kontrolle über das verwendete Installationspräfix zu haben.Anstelle der
--target
Option oder der--install-options
Option habe ich festgestellt, dass Folgendes gut funktioniert (aus der Diskussion über einen Fehler in Bezug auf genau diese Sache unter https://github.com/pypa/pip/issues/446 ):(Oder legen Sie das
PYTHONUSERBASE
Verzeichnis in Ihrer Umgebung fest, bevor Sie den Befehl ausführen.export PYTHONUSERBASE=/path/to/install/to
)Dies verwendet die sehr nützliche
--user
Option , aber sagt es das zu machenbin
,lib
,share
und andere Verzeichnisse werden Sie unter einem benutzerdefinierten Präfix erwarten , anstatt$HOME/.local
.Dann können Sie diese auf Ihre hinzufügen
PATH
,PYTHONPATH
und andere Variablen wie ein normales Installationsverzeichnis.Beachten Sie, dass Sie möglicherweise auch die Optionen
--upgrade
und angeben müssen,--ignore-installed
wenn für Pakete, von denen dies abhängt, neuere Versionen imPYTHONUSERBASE
Verzeichnis installiert werden müssen , um die vom System bereitgestellten Versionen zu überschreiben.Ein vollständiges Beispiel:
..um die neuesten Versionen zu installieren
scipy
undnumpy
in ein Verzeichnis zu packen, das Sie dann in Ihr Verzeichnis aufnehmen könnenPYTHONPATH
(in diesem Beispiel mit bash und für Python 2.6 unter CentOS 6):Die Verwendung von virtualenv ist immer noch eine bessere und sauberere Lösung!
quelle
/bin
Ordner ist, den pip erstellt,--user
erstellt ihn genauso wie er,--PREFIX
während--target
dies nicht der Fall ist.--ignore-installed
ist , wird es benötigt.--editable
lokalen Installationen kompatibel .su
(was beispielsweise in Containern problematisch sein kann).Die Installation eines Python-Pakets enthält häufig nur einige reine Python-Dateien. Wenn das Paket Daten, Skripte und / oder ausführbare Dateien enthält, werden diese in anderen Verzeichnissen als die reinen Python-Dateien installiert.
Angenommen, Ihr Paket enthält keine Daten / Skripte / ausführbaren Dateien und Sie möchten, dass Ihre Python-Dateien in
/python/packages/package_name
(und nicht in ein Unterverzeichnis, das einige Ebenen tiefer liegt/python/packages
als bei der Verwendung--prefix
), können Sie den einmaligen Befehl verwenden:Wenn Sie möchten, dass alle (oder die meisten) Ihrer Pakete dorthin gelangen, können Sie Ihre Pakete so bearbeiten, dass sie Folgendes
~/.pip/pip.conf
enthalten:Auf diese Weise können Sie nicht vergessen, dass Sie es immer wieder angeben müssen.
Alle im Paket enthaltenen excecutables / data / scripts werden weiterhin an ihren Standardpositionen gespeichert, es sei denn, Sie geben zusätzliche Installationsoptionen an (
--prefix
/--install-data
/--install-scripts
usw., Einzelheiten finden Sie in den benutzerdefinierten Installationsoptionen ).quelle
--prefix
gebe das dort an, weil ich ein "lokales" Verzeichnis auf einem gemeinsam genutzten Server im Home-Verzeichnis habe und es als Präfix von verwendet wurde,easy_install
bevor ich zu wechseltepip
. System$PATH
und$PYTHONPATH
wurden zuvor konfiguriert. Stattdesseninstall-option=--install-purelib=/blah
gibt es diese neueretarget=/blah
Option / Schalter. Es ist auch schön, aber manchmal brauchen Sie nur einen Ersatz für--prefix
, den Sie mitsetup.py
oder verwenden würdeneasy_install
.Um eine Bibliothek genau dort zu installieren, wo ich sie haben wollte, navigierte ich zu dem Ort, an dem ich das Verzeichnis mit dem dann verwendeten Terminal haben wollte
Die Logik, die ich von dieser Seite übernommen habe: https://cloud.google.com/appengine/docs/python/googlecloudstorageclient/download
quelle
-t
ist eine Abkürzung für--target
Niemand scheint die Option -t erwähnt zu haben, aber die einfachste:
quelle
-t
Option ist die Kurzversion der--target
Option, die in einer anderen Antwort beschrieben wurde ( stackoverflow.com/a/19404371/594053 ) :)Fügen Sie einfach einen Punkt zur Antwort von @Ian Bicking hinzu:
Verwendung der
--user
Option zum Angeben des installierten Verzeichnisses funktioniert auch, wenn ein Python-Paket in seinem Home-Verzeichnis (ohne sudo-Benutzerrecht) auf dem Remote-Server installiert werden soll.Z.B,
Der Befehl installiert das Paket in einem der Verzeichnisse, die in Ihrem PYTHONPATH aufgeführt sind.
quelle
Testete diese Optionen mit Python3.5 und Pip 9.0.3:
pip install --target / myfolder [Pakete]
Installiert ALLE Pakete einschließlich Abhängigkeiten unter / myfolder. Berücksichtigt nicht, dass abhängige Pakete bereits an anderer Stelle in Python installiert sind. Sie finden Pakete aus / myfolder / [Paketname]. Wenn Sie mehrere Python-Versionen haben, wird dies nicht berücksichtigt (keine Python-Version im Paketordnernamen).
pip install --prefix / myfolder [Pakete]
Prüfungen sind bereits installierte Abhängigkeiten. Installiert Pakete in /myfolder/lib/python3.5/site-packages/[packages]
pip install --root / myfolder [Pakete]
Überprüft Abhängigkeiten wie --prefix, aber der Installationsort lautet /myfolder/usr/local/lib/python3.5/site-packages/[package_name].
pip install --user [Pakete]
Installiert Pakete in $ HOME: /home/[USER‹/.local/lib/python3.5/site-packages Python sucht automatisch von diesem .local-Pfad aus, sodass Sie es nicht auf Ihrem PYTHONPATH ablegen müssen.
=> In den meisten Fällen ist --user die beste Option. Falls der Home-Ordner aus irgendeinem Grund nicht verwendet werden kann, dann --prefix.
quelle
Neuere Versionen von
pip
(8 oder höher) können die--prefix
Option direkt verwenden :Wo
$PREFIX_PATH
ist das Installationspräfix, in dem sich lib, bin und andere Ordner der obersten Ebene befinden?quelle
oder
quelle
Um den bereits guten Rat zu ergänzen, da ich ein Problem bei der Installation von IPython hatte, für das ich keine Schreibberechtigung hatte
/usr/local
.pip verwendet distutils, um seine Installation durchzuführen, und dieser Thread beschreibt , wie dies ein Problem verursachen kann, da es sich auf das stützt
sys.prefix
Einstellung .Mein Problem trat auf, als die IPython-Installation versuchte, mit verweigerter Berechtigung in '/ usr / local / share / man / man1' zu schreiben . Da die Installation fehlschlug, schienen die IPython-Dateien nicht in das bin-Verzeichnis geschrieben zu werden.
Die Verwendung von "--user" funktionierte und die Dateien wurden in ~ / .local geschrieben. Das Hinzufügen von ~ / .local / bin zum $ PATH bedeutete, dass ich von dort aus "ipython" verwenden konnte.
Ich versuche jedoch, dies für eine Reihe von Benutzern zu installieren, und habe die Schreibberechtigung für das
/usr/local/lib/python2.7
Verzeichnis erhalten. Ich habe dort ein "bin" -Verzeichnis erstellt und Anweisungen für distutils festgelegt:dann (
-I
wird verwendet, um die Installation trotz vorheriger Fehler / lokaler Installation zu erzwingen):Dann habe ich
/usr/local/lib/python2.7/bin
zu$PATH
.Ich dachte, ich würde dies einschließen, falls jemand andere ähnliche Probleme auf einem Computer hat, auf den er keinen Sudo-Zugriff hat.
quelle
Wenn Sie Brew mit Python verwenden, wird pip / pip3 leider mit sehr begrenzten Optionen ausgeliefert. Sie haben nicht die oben genannten Optionen --install-option, --target, --user.
Diese Zeile ist möglicherweise sehr umständlich. Ich schlage vor, Pyenv für das Management zu verwenden. Wenn Sie verwenden
brew upgrade python python3
Ironischerweise stufen Sie die Pip-Funktionalität tatsächlich herab.
(Ich poste diese Antwort, einfach weil pip in meinem Mac OSX keine Option --target hat und ich Stunden damit verbracht habe, sie zu reparieren.)
quelle
ignore-installed
aufgrund früherer Bemühungen funktionierte für mich:python -m pip install --user --install-option="--prefix='/myFunkyApp/lib'" --ignore-installed <package-name>
Mit pip
v1.5.6
on Pythonv2.7.3
(GNU / Linux) können Sie mit der Option--root
(anscheinend) ein globales Installationspräfix angeben, unabhängig von den Optionen eines bestimmten Pakets. Versuchen Sie es mit fi,quelle
Ich schlage vor, der Dokumentation zu folgen und die Datei ~ / .pip / pip.conf zu erstellen. Beachten Sie, dass in der Dokumentation das angegebene Header-Verzeichnis fehlt, was zu folgendem Fehler führt:
Der vollständige Arbeitsinhalt der conf-Datei lautet:
Leider kann ich installieren, aber wenn ich versuche, pip zu deinstallieren, wird mir mitgeteilt, dass es kein solches Paket für den Deinstallationsprozess gibt. Es stimmt also immer noch etwas nicht, aber das Paket wird an seinen vordefinierten Speicherort verschoben.
quelle
pip install /path/to/package/
ist jetzt möglich.
Der Unterschied zu diesem und der Verwendung des Flags
-e
oder--editable
besteht darin, dass-e
Links zu dem Speicherort des Pakets (dh Ihrem Download-Ordner) vorhanden sind, anstatt es in Ihrem Python-Pfad zu installieren.Das heißt, wenn Sie das Paket löschen / in einen anderen Ordner verschieben, können Sie es nicht verwenden.
quelle
Ich habe einen einfachen Weg gefunden
Quelle - https://pip.pypa.io/en/stable/reference/pip_install/
Ich habe es mit pip3 versucht und es funktioniert!
quelle