Instalar un paquete de Python en un directorio diferente usando pip?

Sé que la respuesta obvia es usar virtualenv y virtualenvwrapper, pero por varias razones no puedo / no quiero hacer eso.

Entonces, ¿cómo modifico el comando?

pip install package_name 

¿Para hacer que pip instale el paquete en un lugar diferente a los site-packages predeterminados?

Utilizar:

 pip install --install-option="--prefix=$PREFIX_PATH" package_name 

También es posible que desee utilizar --ignore-installed para forzar la reinstalación de todas las dependencias con este nuevo prefijo. Puede usar --install-option varias veces para agregar cualquiera de las opciones que puede usar con la instalación de python setup.py install ( --prefix es probablemente lo que quiere, pero hay muchas más opciones que podría usar).

El interruptor de destino es lo que estás buscando:

pip install –target = d: \ somewhere \ other \ than \ the \ default package_name

Pero aún debe agregar d:\somewhere\other\than\the\default a PYTHONPATH para usarlos realmente desde esa ubicación.


Actualizar pip si el interruptor de destino no está disponible:

En Linux o OS X:

 pip install -U pip 

En Windows (esto funciona alrededor de un problema ):

 python -m pip install -U pip 

En lugar de la opción --target o la opción --install-options , he encontrado que lo siguiente funciona bien (de la discusión sobre un error relacionado con esto en https://github.com/pypa/pip/issues/446 ):

 PYTHONUSERBASE=/path/to/install/to pip install --user 

(O establezca el directorio PYTHONUSERBASE en su entorno antes de ejecutar el comando, usando export PYTHONUSERBASE=/path/to/install/to )

Esto utiliza la muy útil opción de --user , pero le dice que haga los directorios bin , lib , share y otros que esperaría con un prefijo personalizado en lugar de $HOME/.local .

Luego puede agregar esto a su PATH , PYTHONPATH y otras variables como lo haría con un directorio de instalación normal.

Tenga en cuenta que es posible que también deba especificar las opciones --upgrade y --ignore-installed si los paquetes de los que depende esto requieren que se instalen versiones más nuevas en el directorio PYTHONUSERBASE , para anular las versiones proporcionadas por el sistema.

Un ejemplo completo:

 PYTHONUSERBASE=/opt/mysterypackage-1.0/python-deps pip install --user --upgrade numpy scipy 

..para instalar las versiones más recientes del paquete scipy y numpy en un directorio que luego puede incluir en su PYTHONPATH así (usando bash y para python 2.6 en CentOS 6 para este ejemplo):

 export PYTHONPATH=/opt/mysterypackage-1.0/python-deps/lib64/python2.6/site-packages:$PYTHONPATH export PATH=/opt/mysterypackage-1.0/python-deps/bin:$PATH 

¡Usar virtualenv sigue siendo una solución mejor y más ordenada!

La instalación de un paquete de Python a menudo solo incluye algunos archivos puros de Python. Si el paquete incluye datos, scripts y / o ejecutables, estos se instalan en directorios diferentes de los archivos de Python puros.

Suponiendo que su paquete no tiene datos / scripts / ejecutables, y que desea que sus archivos de Python vayan a /python/packages/package_name (y no a algún subdirectorio unos pocos niveles debajo de /python/packages como cuando usa --prefix ), puede use el comando de una sola vez:

 pip install --install-option="--install-purelib=/python/packages" package_name 

Si desea que todos (o la mayoría) de sus paquetes vayan allí, puede editar su ~/.pip/pip.conf para incluir:

 [install] install-option=--install-purelib=/python/packages 

De esa manera no puedes olvidar tener que especificarlo una y otra vez.

Todos los archivos ejecutables / datos / scripts incluidos en el paquete seguirán llegando a sus lugares predeterminados a menos que especifique opciones de instalación adicionales ( --prefix / --install-data / --install-scripts , etc., para obtener detalles, consulte la instalación personalizada opciones).

Para instalar una biblioteca exactamente donde la quería, navegué a la ubicación en la que quería que se usara el directorio con el terminal

 pip install mylibraryName -t . 

la lógica que tomé de esta página: https://cloud.google.com/appengine/docs/python/googlecloudstorageclient/download

Nadie parece haber mencionado la opción -t, pero eso es lo más fácil:

 pip install -t   

Solo agrega un punto a la respuesta de @Ian Bicking:

El uso de la opción --user para especificar el directorio instalado también funciona si uno desea instalar algún paquete de Python en el directorio de inicio (sin el derecho de usuario de sudo) en el servidor remoto.

P.ej,

 pip install --user python-memcached 

El comando instalará el paquete en uno de los directorios que figuran en su PYTHONPATH.

Las versiones más recientes de pip (8 o posterior) pueden usar directamente la opción --prefix :

 pip install --prefix=$PREFIX_PATH package_name 

donde $PREFIX_PATH es el prefijo de instalación donde se ubican las carpetas lib, bin y otras carpetas de nivel superior.

Probé estas opciones con python3.5 y pip 9.0.3:

pip instalar –target / myfolder [paquetes]

Instala TODOS los paquetes, incluidas las dependencias bajo / myfolder. No tiene en cuenta que los paquetes dependientes ya están instalados en otro lugar en Python. Encontrará paquetes desde / myfolder / [package_name]. En caso de que tenga varias versiones de Python, esto no lo tiene en cuenta (no hay una versión de Python en el nombre de la carpeta del paquete).

pip instalar –prefix / myfolder [paquetes]

Los cheques son dependencias ya instaladas. Instalaré los paquetes en /myfolder/lib/python3.5/site-packages/[packages]

pip instalar –root / myfolder [paquetes]

Comprueba las dependencias como –prefix pero la ubicación de la instalación será /myfolder/usr/local/lib/python3.5/site-packages/[package_name].

pip install –user [paquetes]

Instalará paquetes en $ HOME: /home/[USER◆/.local/lib/python3.5/site-packages Python realiza búsquedas automáticamente desde esta ruta .local, por lo que no necesita ponerlo en su PYTHONPATH.

=> En la mayoría de los casos, el usuario es la mejor opción para usar. En caso de que no se pueda usar la carpeta de inicio por alguna razón, entonces –prefix.

 pip install packageName -t pathOfDirectory 

o

 pip install packageName --target pathOfDirectorty 

Para agregar al ya bueno consejo, ya que tuve un problema al instalar IPython cuando no tenía permisos de escritura en /usr/local .

pip usa distutils para hacer su instalación y este hilo discute cómo eso puede causar un problema ya que depende de la configuración de sys.prefix .

Mi problema ocurrió cuando la instalación de IPython intentó escribir en ‘/ usr / local / share / man / man1’ con el permiso denegado . Como la instalación falló, no pareció escribir los archivos IPython en el directorio bin.

El uso de “–user” funcionó y los archivos se escribieron en ~ / .local. Agregar ~ / .local / bin a $ PATH significaba que podía usar “ipython” desde allí.

Sin embargo, estoy intentando instalar esto para varios usuarios y se me ha dado permiso de escritura en el directorio /usr/local/lib/python2.7 . Creé un directorio “bin” debajo de allí y establecí directivas para los distritos:

 vim ~/.pydistutils.cfg [install] install-data=/usr/local/lib/python2.7 install-scripts=/usr/local/lib/python2.7/bin 

luego ( -I se usa para forzar la instalación a pesar de fallas previas / instalación local):

 pip install -I ipython 

Luego agregué /usr/local/lib/python2.7/bin a $PATH .

Pensé en incluir esto en caso de que alguien más tenga problemas similares en una máquina a la que no tenga acceso sudo.

Con pip v1.5.6 en Python v2.7.3 (GNU / Linux), la opción --root permite especificar un prefijo de instalación global, (aparentemente) independientemente de las opciones específicas del paquete. Prueba fi

 $ pip install --root=/alternative/prefix/path package_name 

Sugiero seguir la documentación y crear el archivo ~ / .pip / pip.conf. Tenga en cuenta que en la documentación faltan el directorio del encabezado especificado, lo que conduce al siguiente error:

 error: install-base or install-platbase supplied, but installation scheme is incomplete 

El contenido completo de trabajo del archivo conf es:

 [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 

Desafortunadamente, puedo instalar, pero cuando bash desinstalar pip me dice que no hay un paquete de este tipo para el proceso de desinstalación … así que algo sigue mal pero el paquete va a su ubicación predefinida.

Si está utilizando cerveza con python, desafortunadamente, pip / pip3 se envía con opciones muy limitadas. No tiene las opciones –install-option, –target, –user como se mencionó anteriormente.

Nota sobre la instalación de pip – user
La instalación normal de pip –user está deshabilitada para Python elaborado. Esto se debe a un error en distutils, porque Homebrew escribe un distutils.cfg que establece el prefijo del paquete. Una posible solución (que coloca los scripts ejecutables en ~ / Library / Python /./ bin) es: python -m pip install --user --install-option="--prefix="

Usted puede encontrar esta línea muy engorroso. Sugiero utilizar pyenv para la gestión. Si estas usando

brew upgrade python python3

Irónicamente, en realidad estás degradando la funcionalidad pip.

(Publico esta respuesta, simplemente porque pip en mi Mac OSX no tiene la opción –Meta, y llevo horas arreglandola)

pip install /path/to/package/

ahora es posible.

La diferencia con esto y el uso de la --editable -e o – --editable es que -e vincula con el lugar donde se guarda el paquete (es decir, su carpeta de descargas), en lugar de instalarlo en su ruta de Python.

Esto significa que si elimina / mueve el paquete a otra carpeta, no podrá usarlo.