Ich weiß, dass die offensichtliche Antwort darin besteht, virtualenv und virtualenvwrapper zu verwenden, aber aus verschiedenen Gründen kann/will ich das nicht.
Wie modifiziere ich den Befehl?
pip install package_name
pip
das Paket an einem anderen Ort als dem Standardcode site-packages
installieren lassen?
Benutzen:
pip install --install-option="--prefix=$PREFIX_PATH" package_name
Möglicherweise möchten Sie auch --ignore-installed
verwenden, um zu erzwingen, dass alle Abhängigkeiten mit diesem neuen Präfix erneut installiert werden. Sie können --install-option
mehrfach verwenden, um eine der Optionen hinzuzufügen, die Sie mit python setup.py install
verwenden können (--prefix
ist wahrscheinlich das, was Sie möchten, aber es gibt eine Menge weiterer Optionen, die Sie verwenden könnten).
Der - Ziel Schalter ist das, wonach Sie suchen:
pip install --target = d:\irgendwo\anders\als\der\Standardpaketname
Sie müssen jedoch noch d:\somewhere\other\than\the\default
zu PYTHONPATH
hinzufügen, um sie von diesem Ort aus tatsächlich verwenden zu können.
Aktualisieren Sie das Pip, wenn der Zielschalter nicht verfügbar ist:
Unter Linux oder OS X:
pip install -U pip
Unter Windows (das funktioniert um ein Problem ):
python -m pip install -U pip
Anstelle der --target
-Option oder der --install-options
-Option habe ich festgestellt, dass das Folgende gut funktioniert (aus der Diskussion eines Fehlers bezüglich dieser Sache unter https://github.com/pypa/pip/issues/446 ):
PYTHONUSERBASE=/path/to/install/to pip install --user
(Oder legen Sie das Verzeichnis PYTHONUSERBASE
in Ihrer Umgebung fest, bevor Sie den Befehl mit export PYTHONUSERBASE=/path/to/install/to
ausführen.)
Dies verwendet die sehr nützliche --user
-Option, weist sie jedoch an, die bin
, lib
, share
und andere Verzeichnisse zu erstellen, die Sie unter einem benutzerdefinierten Präfix anstelle von $HOME/.local
erwarten würden.
Dann können Sie dies zu Ihrer PATH
, PYTHONPATH
und anderen Variablen hinzufügen, wie Sie es von einem normalen Installationsverzeichnis erwarten würden.
Beachten Sie, dass Sie möglicherweise auch die Optionen --upgrade
und --ignore-installed
angeben müssen, wenn Pakete, für die dies erforderlich ist, neuere Versionen im Verzeichnis PYTHONUSERBASE
installiert werden müssen, um die vom System bereitgestellten Versionen zu überschreiben.
Ein vollständiges Beispiel:
PYTHONUSERBASE=/opt/mysterypackage-1.0/python-deps pip install --user --upgrade numpy scipy
..zum Installieren der neuesten Versionen des Pakets scipy
und numpy
in einem Verzeichnis, das Sie wie folgt in Ihre PYTHONPATH
einfügen können (in diesem Beispiel für bash und für Python 2.6 unter CentOS 6):
export PYTHONPATH=/opt/mysterypackage-1.0/python-deps/lib64/python2.6/site-packages:$PYTHONPATH
export PATH=/opt/mysterypackage-1.0/python-deps/bin:$PATH
Die Verwendung von virtualenv ist immer noch eine bessere und schönere Lösung!
Die Installation eines Python-Pakets enthält oft nur einige reine Python-Dateien. Wenn das Paket Daten, Skripts 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/Scripts/Executables, und Sie möchten, dass Ihre Python-Dateien in /python/packages/package_name
(und nicht in ein Unterverzeichnis ein paar Ebenen unterhalb von /python/packages
wie bei --prefix
) gespeichert werden, können Sie den einmaligen Befehl verwenden:
pip install --install-option="--install-purelib=/python/packages" package_name
Wenn Sie möchten, dass alle (oder die meisten) Ihrer Pakete dorthin gehen, können Sie Ihren ~/.pip/pip.conf
so bearbeiten, dass er Folgendes enthält:
[install]
install-option=--install-purelib=/python/packages
Auf diese Weise können Sie nicht vergessen, dass Sie es immer wieder spezifizieren müssen.
Alle im Paket enthaltenen excecutables/data/scripts bleiben an ihren Standardpositionen, sofern Sie keine zusätzlichen Installationsoptionen angeben (--prefix
/--install-data
/--install-scripts
usw.). Weitere Informationen finden Sie in den Optionen custom installation .
Um eine Bibliothek genau dort zu installieren, wo ich sie haben wollte, navigierte ich zu dem Ort, an dem ich das Verzeichnis mit dem Terminal wollte
pip install mylibraryName -t .
die Logik, die ich von dieser Seite übernommen habe: https://cloud.google.com/appengine/docs/python/googlecloudstorageclient/download
Niemand scheint die Option -t erwähnt zu haben, aber die einfachste:
pip install -t <direct directory> <package>
Fügen Sie einfach einen Punkt zur Antwort von @Ian Bicking hinzu:
Die Verwendung der Option --user
zur Angabe des installierten Verzeichnisses funktioniert auch, wenn ein Python-Paket im eigenen Verzeichnis (ohne Sudo-Benutzerrecht) auf einem Remote-Server installiert werden soll.
Z.B.,
pip install --user python-memcached
Der Befehl installiert das Paket in einem der Verzeichnisse, die in Ihrem PYTHONPATH aufgelistet sind.
Neuere Versionen von pip
(8 oder höher) können die Option --prefix
direkt verwenden :
pip install --prefix=$PREFIX_PATH package_name
dabei ist $PREFIX_PATH
das Installationspräfix, in dem lib, bin und andere Ordner der obersten Ebene abgelegt werden.
Ich habe diese Optionen mit python3.5 und pip 9.0.3 getestet:
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/[package_name]. Falls Sie mehrere Python-Versionen haben, wird dies nicht berücksichtigt (keine Python-Version im Paketordnernamen).
pip install --prefix/myfolder [Pakete]
Checks 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 das Installationsverzeichnis 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, so dass Sie es nicht hinzufügen müssen dein PYTHONPATH.
=> In den meisten Fällen ist --user die beste Option. Falls der Heimatordner aus irgendeinem Grund nicht verwendet werden kann, dann --prefix.
Zu dem ohnehin guten Rat hinzuzufügen, da ich ein Problem mit der Installation von IPython hatte, wenn ich keine Schreibberechtigung für /usr/local
hatte.
pip verwendet distutils für seine Installation und dieser Thread erläutert, wie dies zu einem Problem führen kann, da es auf die Einstellung sys.prefix
angewiesen ist.
Mein Problem trat auf, als die IPython-Installation versuchte, mit Permission denied nach '/ usr/local/share/man/man1' zu schreiben. Da die Installation fehlgeschlagen ist, wurden die IPython-Dateien scheinbar nicht in das Verzeichnis bin geschrieben.
Mit "--user" funktionierte es und die Dateien wurden in ~/.local geschrieben. Durch Hinzufügen von ~/.local/bin zum $ PATH konnte ich "ipython" von dort aus verwenden.
Ich versuche jedoch, dies für einige Benutzer zu installieren und hatte die Schreibberechtigung für das /usr/local/lib/python2.7
-Verzeichnis erhalten. Ich habe dort ein "bin" -Verzeichnis erstellt und Anweisungen für Distutils gesetzt:
vim ~/.pydistutils.cfg
[install]
install-data=/usr/local/lib/python2.7
install-scripts=/usr/local/lib/python2.7/bin
dann (-I
wird verwendet, um die Installation trotz früherer Fehler/.local-Installation zu erzwingen):
pip install -I ipython
Dann fügte ich /usr/local/lib/python2.7/bin
zu $PATH
hinzu.
Ich dachte, ich würde dies einbeziehen, falls jemand anderes ähnliche Probleme auf einer Maschine hat, auf die Sudo keinen Zugriff hat.
Ich schlage vor, der Dokumentation zu folgen und die Datei ~/.pip/pip.conf zu erstellen. Beachten Sie in der Dokumentation, dass das angegebene Header-Verzeichnis fehlt, was zu folgenden Fehlern führt:
error: install-base or install-platbase supplied, but installation scheme is incomplete
Der volle Arbeitsinhalt der conf-Datei ist:
[install]
install-base=$HOME
install-purelib=python/lib
install-platlib=python/lib.$PLAT
install-scripts=python/scripts
install-headers=python/include
install-data=python/data
Leider kann ich installieren, aber bei dem Versuch, pip zu deinstallieren, wird mir mitgeteilt, dass es kein solches Paket für die Deinstallation gibt. Etwas ist immer noch falsch, aber das Paket wird an den vordefinierten Ort verschoben.
pip install packageName -t pathOfDirectory
oder
pip install packageName --target pathOfDirectorty
Wenn Sie Brew mit Python verwenden, werden Pip/Pip3 leider mit sehr begrenzten Optionen geliefert. Sie haben nicht die Optionen --install-option, --target, --user wie oben erwähnt.
Hinweis on pip install --user
Der normale Pip-Installationsbenutzer ist für gebrühtes Python deaktiviert. Dies liegt an einem Fehler in distutils, da Homebrew eine distutils.cfg schreibt, die das Paketpräfix ..__ festlegt. Eine mögliche Problemumgehung (die ausführbare Skripts in ~/Library/Python /./ bin ablegt) ist:python -m pip install --user --install-option="--prefix=" <package-name>
Diese Zeile könnte sehr umständlich sein. Ich schlage vor, pyenv für das Management zu verwenden. .__ Wenn Sie verwenden
brew upgrade python python3
Ironischerweise sind Sie eigentlich downgrade pip-Funktionalität.
(Ich poste diese Antwort, einfach weil pip in meinem mac osx nicht die Option --target hat und ich habe Stunden damit verbracht, sie zu reparieren.)
Mit pip v1.5.6
für Python v2.7.3
(GNU/Linux) ermöglicht die Option --root
die Angabe eines globalen Installationspräfixes (scheinbar) unabhängig von den Optionen des jeweiligen Pakets. Versuchen Sie f.i.
$ pip install --root=/alternative/prefix/path package_name
pip install /path/to/package/
ist jetzt möglich
Der Unterschied dazu und bei Verwendung des Flags -e
oder --editable
besteht darin, dass -e
mit dem Speicherort des Pakets (d. H. Dem Downloadordner) verknüpft ist, anstatt es in den Python-Pfad zu installieren.
Das heißt, wenn Sie das Paket löschen oder in einen anderen Ordner verschieben, können Sie es nicht verwenden.