paquetes - Instalar un paquete de Python en un directorio diferente usando pip?
instalar pip en windows 10 (12)
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
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?
El interruptor de --target 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 configure 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 alguno de los paquetes de los cuales depende esto requiere que se instalen versiones más nuevas en el directorio PYTHONUSERBASE
, para anular las versiones provistas 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 limpia!
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 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 información detallada sobre la instalación personalizada opciones).
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.
Nadie parece haber mencionado la opción -t, pero la más fácil:
pip install -t <direct directory> <package>
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 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.
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
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.
Note 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=" <package-name>
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 --detar, y llevo horas reparándolo)
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.
Sugiero seguir la documentación y crear el archivo ~ / .pip / pip.conf. Observe 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 instalarlo, pero cuando intento desinstalar pip me dice que no hay tal paquete para el proceso de desinstalación ... así que algo sigue mal pero el paquete va a su ubicación predefinida.
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. Puedes usar --install-option
varias veces para agregar cualquiera de las opciones que puedes usar con python setup.py install
( --prefix
es probablemente lo que quieres, pero hay muchas más opciones que puedes usar).