Ich habe normalerweise Python-Pakete über pip installiert.
Für Google App Engine muss ich Pakete in einem anderen Zielverzeichnis installieren.
Ich habe es versucht:
pip install -I flask-restful --target ./lib
aber es scheitert mit:
muss entweder home oder prefix / exec-prefix angeben - nicht beides
Wie kann ich das zum Laufen bringen?
pip install
Betrieb :(--target
während nicht Standard ruinierenpip install
Verhalten?Ich glaube, es gibt eine einfachere Lösung für dieses Problem (Homebrews Python unter MacOS), die Ihre normalen Pip-Operationen nicht unterbricht.
Alles, was Sie tun müssen, ist, eine
setup.cfg
Datei im Stammverzeichnis Ihres Projekts zu erstellen , normalerweise dort, wo sich Ihre Haupt-__init__.py
oder ausführbare py-Datei befindet. Wenn der Stammordner Ihres Projekts: lautet/path/to/my/project/
, erstellen Sie dort einesetup.cfg
Datei und fügen Sie die magischen Wörter ein:OK, jetzt können Sie die Befehle von pip für diesen Ordner ausführen:
Dieser Befehl wird nur für diesen Ordner ordnungsgemäß ausgeführt. Kopieren
setup.cfg
Sie einfach in andere Projekte, die Sie möglicherweise haben. Sie müssen kein in.pydistutils.cfg
Ihr Home-Verzeichnis schreiben .Nachdem Sie die Module installiert haben, können Sie sie entfernen
setup.cfg
.quelle
setup.cfg
Teil nach dem Einbau entfernen . Ich habe 2 ganze Tage lang gebrannt, um herauszufinden, warum meine virtuelle Umgebung mit Fehlern wie verschraubt warCould not install packages due to an EnvironmentError: [Errno 1] Operation not permitted: '/bin/easy_install'
. Das Entfernen der Setup-Datei stellte meineUnter OSX (Mac) wird ein Projektordner mit dem Namen / var / myproject angenommen
cd /var/myproject
setup.cfg
und fügen Sie hinzu[install] prefix=
pip install <packagename> -t .
quelle
-t .
außerhalb des Verzeichnisses bleibt . Dieser Weg funktionierte für mich und der andere nicht, obwohl ich keine Ahnung habe warum.Eine andere Lösung * für Homebrew-Benutzer ist einfach die Verwendung von a
virtualenv
.Natürlich, das kann die Notwendigkeit für das Zielverzeichnis ohnehin entfernen - aber auch wenn es nicht der Fall ist, habe ich festgestellt
--target
standardmäßig funktioniert (wie in, ohne Erstellen / Ändern einer Konfigurationsdatei) , wenn sie in einer virtuellen Umgebung.* Ich sage Lösung; Vielleicht ist es nur eine weitere Motivation, Venvs akribisch einzusetzen ...
quelle
Ich habe Fehler mit den anderen Empfehlungen getroffen
--install-option="--prefix=lib"
. Das einzige, was ich gefunden habe, das funktioniert hat, ist die VerwendungPYTHONUSERBASE
wie hier beschrieben .das ist nicht genau das gleiche wie
--target
, aber es macht auf jeden Fall den Trick für mich.quelle
Wie bereits erwähnt, ist dies ein bekannter Fehler bei Pip & Python, der mit Homebrew installiert wurde.
Wenn Sie eine
~/.pydistutils.cfg
Datei mit der Anweisung "leeres Präfix" erstellen , wird dieses Problem behoben, aber der normale Pip-Betrieb wird unterbrochen.Bis dieser Fehler offiziell behoben ist, besteht eine der Optionen darin, ein eigenes Bash-Skript zu erstellen, das diesen Fall behandelt:
Dieses Skript umschließt Ihren Befehl und:
~/.pydistutils.cfg
Datei mit der Anweisung "leeres Präfix"~/.pydistutils.cfg
DateiDieses Skript kann geändert und an Ihre Bedürfnisse angepasst werden, aber Sie bekommen eine Vorstellung davon. Und Sie können Ihren Befehl ausführen, ohne die Leitung zu bremsen. Ich hoffe es hilft :)
quelle
Wenn Sie virtualenv * verwenden, ist es möglicherweise eine gute Idee, Ihre Verwendung zu überprüfen
which pip
.Wenn Sie so etwas sehen, als wären
/usr/local/bin/pip
Sie aus Ihrer Umgebung ausgebrochen. Durch Reaktivieren Ihrer virtuellen Umgebung wird Folgendes behoben:VirtualEnv:
$ source bin/activate
VirtualFish:
$ vf activate [environ]
*: Ich benutze Virtualfish, aber ich gehe davon aus, dass dieser Tipp für beide relevant ist.
quelle
Ich habe ein ähnliches Problem. Ich benutze das Flag --system , um den Fehler zu vermeiden, da ich hier in einem anderen Thread beschreibe, in dem ich den speziellen Fall meiner Situation erkläre. Ich poste dies hier in der Erwartung, dass es jedem helfen kann, der mit dem gleichen Problem konfrontiert ist.
quelle