Por lo general, he instalado paquetes de python a través de pip.
Para Google App Engine, necesito instalar paquetes en otro directorio de destino.
He intentado:
pip install -I flask-restful --target ./lib
pero falla con:
debe suministrar home o prefix / exec-prefix, no ambos
¿Cómo puedo hacer que esto funcione?
pip install
operaciones normales :(--target
mientras no arruinar por defectopip install
comportamiento?Creo que hay una solución más simple para este problema (Homebrew's Python en macOS) que no interrumpirá sus operaciones normales de pip.
Todo lo que tiene que hacer es crear un
setup.cfg
archivo en el directorio raíz de su proyecto, generalmente donde está su__init__.py
archivo py principal o ejecutable. Entonces, si la carpeta raíz de su proyecto es:,/path/to/my/project/
cree unsetup.cfg
archivo allí y coloque las palabras mágicas dentro:OK, ahora deberías poder ejecutar los comandos de pip para esa carpeta:
Este comando se ejecutará correctamente solo para esa carpeta. Simplemente copie
setup.cfg
a cualquier otro proyecto que pueda tener. No es necesario escribir un.pydistutils.cfg
en su directorio de inicio.Una vez que haya terminado de instalar los módulos, puede eliminar
setup.cfg
.fuente
setup.cfg
después de la instalación. Me quemé durante 2 días enteros tratando de descubrir por qué mi entorno virtualenv estaba jodido, con errores comoCould not install packages due to an EnvironmentError: [Errno 1] Operation not permitted: '/bin/easy_install'
. Extracción del archivo de instalación me devolvió la corduraEn OSX (mac), suponiendo una carpeta de proyecto llamada / var / myproject
cd /var/myproject
setup.cfg
y agrega[install] prefix=
pip install <packagename> -t .
fuente
-t .
lugar de permanecer fuera del directorio. Esta manera funcionó para mí y la otra no, aunque no tengo idea de por qué.Otra solución * para los usuarios de Homebrew es simplemente usar a
virtualenv
.Por supuesto, eso puede eliminar la necesidad del directorio de destino de todos modos, pero incluso si no lo hace, he encontrado
--target
trabajos por defecto (como en, sin crear / modificar un archivo de configuración) cuando está en un entorno virtual.* Digo solución; tal vez es solo otra motivación para usar meticulosamente los venvs ...
fuente
Llegué a errores con las otras recomendaciones
--install-option="--prefix=lib"
. Lo único que encontré que funcionó es usarPYTHONUSERBASE
como se describe aquí .esto no es exactamente lo mismo
--target
, pero en cualquier caso me sirve.fuente
Como se mencionó, este es un error conocido con pip & python instalado con homebrew.
Si crea un
~/.pydistutils.cfg
archivo con la instrucción "prefijo vacío", solucionará este problema pero interrumpirá las operaciones normales de pip.Hasta que este error se aborde oficialmente, una de las opciones sería crear su propio script bash que manejaría este caso:
Este script envuelve su comando y:
~/.pydistutils.cfg
archivo con la instrucción "prefijo vacío"~/.pydistutils.cfg
archivoEste script se puede cambiar y adaptar para satisfacer sus necesidades, pero se hace una idea. Y le permite ejecutar su comando sin pip de frenado. Espero eso ayude :)
fuente
Si está usando virtualenv *, puede ser una buena idea verificar
which pip
que esté usando.Si ve algo como
/usr/local/bin/pip
que se ha escapado de su entorno. Reactivar su virtualenv arreglará esto:VirtualEnv:
$ source bin/activate
VirtualFish:
$ vf activate [environ]
*: Uso virtualfish, pero supongo que este consejo es relevante para ambos.
fuente
Tengo un problema similar. Uso el indicador --system para evitar el error, ya que describo aquí en otro hilo donde explico el caso específico de mi situación. Publico esto aquí esperando que pueda ayudar a cualquiera que enfrente el mismo problema.
fuente