J'ai généralement installé des packages python via pip.
Pour Google App Engine, je dois installer des packages dans un autre répertoire cible.
J'ai essayé:
pip install -I flask-restful --target ./lib
mais cela échoue avec:
doit fournir soit home, soit prefix / exec-prefix - pas les deux
Comment puis-je faire fonctionner cela?
pip install
opérations normales :(--target
tout ne pas ruiner par défaut lepip install
comportement?Je pense qu'il existe une solution plus simple à ce problème (Python de Homebrew sur macOS) qui ne cassera pas vos opérations pip normales.
Tout ce que vous avez à faire est de créer un
setup.cfg
fichier dans le répertoire racine de votre projet, généralement là où se trouve votre__init__.py
fichier py principal ou exécutable. Donc, si le dossier racine de votre projet est:,/path/to/my/project/
créez unsetup.cfg
fichier là-dedans et mettez les mots magiques à l'intérieur:OK, maintenant vous devriez pouvoir exécuter les commandes de pip pour ce dossier:
Cette commande s'exécutera correctement pour ce dossier uniquement. Copiez simplement
setup.cfg
les autres projets que vous pourriez avoir. Pas besoin d'écrire un.pydistutils.cfg
sur votre répertoire personnel.Une fois que vous avez terminé d'installer les modules, vous pouvez supprimer
setup.cfg
.la source
setup.cfg
après l'installation. J'ai brûlé pendant 2 jours entiers en essayant de comprendre pourquoi mon environnement virtualenv était vissé, avec des erreurs commeCould not install packages due to an EnvironmentError: [Errno 1] Operation not permitted: '/bin/easy_install'
. La suppression du fichier d'installation a restauré ma santé mentaleSous OSX (mac), en supposant un dossier de projet appelé / var / myproject
cd /var/myproject
setup.cfg
et ajoutez[install] prefix=
pip install <packagename> -t .
la source
-t .
au lieu de rester en dehors du répertoire . Cette façon a fonctionné pour moi et l'autre n'a pas fonctionné, même si je ne sais pas pourquoi.Une autre solution * pour les utilisateurs de Homebrew consiste simplement à utiliser un fichier
virtualenv
.Bien sûr, cela peut supprimer le besoin du répertoire cible de toute façon - mais même si ce n'est pas le cas, j'ai trouvé des
--target
travaux par défaut (comme dans, sans créer / modifier un fichier de configuration) dans un environnement virtuel.* Je dis solution; c'est peut-être juste une autre motivation pour utiliser méticuleusement les venvs ...
la source
J'ai rencontré des erreurs avec les autres recommandations
--install-option="--prefix=lib"
. La seule chose que j'ai trouvée qui a fonctionné est d'utiliserPYTHONUSERBASE
comme décrit ici .ce n'est pas exactement la même chose que
--target
, mais cela me convient en tout cas.la source
Comme d'autres l'ont mentionné, il s'agit d'un bogue connu avec pip & python installé avec homebrew.
Si vous créez un
~/.pydistutils.cfg
fichier avec l'instruction "préfixe vide", cela résoudra ce problème mais cela interrompra les opérations normales de pip.Jusqu'à ce que ce bogue soit officiellement résolu, l'une des options serait de créer votre propre script bash qui gérerait ce cas:
Ce script encapsule votre commande et:
~/.pydistutils.cfg
fichier avec l'instruction "préfixe vide"~/.pydistutils.cfg
fichierCe script peut être modifié et adapté pour répondre à vos besoins, mais vous avez une idée. Et cela vous permet d'exécuter votre commande sans pépin de freinage. J'espère que ça aide :)
la source
Si vous utilisez virtualenv *, il peut être judicieux de vérifier
which pip
que vous utilisez.Si vous voyez quelque chose comme si
/usr/local/bin/pip
vous êtes sorti de votre environnement. La réactivation de votre virtualenv résoudra ce problème:VirtualEnv:
$ source bin/activate
VirtualFish:
$ vf activate [environ]
*: J'utilise virtualfish, mais je suppose que cette astuce concerne les deux.
la source
J'ai un problème similaire. J'utilise le drapeau --system pour éviter l'erreur comme je le décris ici sur un autre thread où j'explique le cas spécifique de ma situation. Je poste ceci ici en espérant que cela puisse aider toute personne confrontée au même problème.
la source