Instalar paquetes pip en la carpeta $ HOME

330

¿Es posible? Al instalar pip, instale los paquetes de python dentro de mi $HOMEcarpeta. (por ejemplo, quiero instalar mercurial, usar pip, pero dentro en $HOMElugar de /usr/local)

Estoy con una máquina Mac y solo pensé en esta posibilidad, en lugar de "contaminar" mi /usr/local, usaría mi $HOMEen su lugar.

PEP370 es exactamente sobre esto. ¿Es solo crear ay ˜/.localhacer lo pip install packagesuficiente para que estos paquetes se instalen solo en mi carpeta $ HOME?

Alguien todavía te usa MS-DOS
fuente
¿Has echado un vistazo a virtualenv? Puede instalar paquetes con pip en un entorno aislado.
joet3ch
2
Lo pensé, pero me gustaría instalar algunas aplicaciones de Python usando el Python existente (2.6.1), pero en lugar de instalar en / usr / local /, instalar en mi carpeta $ HOME y agregarlo a $ PATH. Quiero saber si es posible, y cualquier advertencia de este enfoque.
Alguien todavía te usa MS-DOS el
11
+1 por promocionar PEP370. Esta es una opción simple pero útil que más personas deberían conocer.
Ned Deily
Estaba luchando con un problema similar (posiblemente causado por pip mal configurado y easy_install para dos pyhtons diferentes). Como último recurso, intenté usar plain $ python setup.py --user install. Y funcionó. El paquete ahora está instalado en el subdirectorio casero y todo funciona como se esperaba. Tendré que hablar con el administrador de mi servidor.
Jan Vlcinsky
1
Si necesita instalar PIP, simplemente haga algo como wget https://bootstrap.pypa.io/get-pip.pyseguir python get-pip.pyy estará listo. Puede ser útil si está en una máquina donde el PIP instalado es demasiado antiguo (fue el caso para mí). Consulte pip.readthedocs.org/en/latest/installing.html para obtener más información.
Markus

Respuestas:

463

Si bien puedes usar a virtualenv, no es necesario. El truco es pasar el --userargumento PEP370 al setup.pyscript. Con la última versión de pip, una forma de hacerlo es:

pip install --user mercurial

Esto debería resultar en la instalación del hgscript $HOME/.local/bin/hgy en el resto del paquete hg $HOME/.local/lib/pythonx.y/site-packages/.

Tenga en cuenta que lo anterior es cierto para Python 2.6. Ha habido un poco de controversia entre los desarrolladores principales de Python sobre cuál es la ubicación de directorio apropiada en Mac OS X para instalaciones de estilo PEP370 user. En Python 2.7 y 3.2, la ubicación en Mac OS X cambió de $HOME/.locala $HOME/Library/Python. Esto podría cambiar en una versión futura. Pero, por ahora, en 2.7 (y 3.2, si hgfueran compatibles con Python 3), las ubicaciones anteriores serán $HOME/Library/Python/x.y/bin/hgy $HOME/Library/Python/x.y/lib/python/site-packages.

Ned Deily
fuente
Buen punto. Desafortunadamente, hay un error en Python 2.7 que hace que PYTHONUSERBASE sea ignorado para las compilaciones de framework OS X. Se solucionará para Python 2.7.3.
Ned Deily
1
Esto se ve muy interesante. easy_installviene instalado en Mac OS X de manera predeterminada, por lo que solo tendría pip instalado fuera de la $HOMEcarpeta.
Alguien todavía te usa MS-DOS el
1
Intenté cambiar la PYTHONUSERBASE a otra ubicación. Sin éxito. ¿Cómo se hace esto en Windows específicamente?
Snerd
2
Tenga en cuenta que si hace esto y luego intenta usar entornos conda, los archivos instalados .localsiempre se verán afectados primero, lo que puede provocar errores de importación muy difíciles de rastrear.
tacaswell
12
Tenga en cuenta que en OSX, la carpeta bin del directorio del sitio del usuario no está en RUTA. Esto significa que los scripts instalados por paquetes en el directorio del sitio del usuario no serán ejecutables a menos que usted export PATH=$PATH:~/Library/Python/X.Y/bin/.
André Caron
21

Usaría virtualenv en su directorio HOME.

$ sudo easy_install -U virtualenv
$ cd ~
$ virtualenv .
$ bin/pip ...

Luego, también puede modificar ~/.(login|profile|bash_profile), lo que sea correcto para que su shell agregue ~ / bin a su RUTA y luego ese pip|python|easy_installsería el que se usará por defecto.

Ross Patterson
fuente
99
El "de facto" manera de hacer esto es virtualenv venv, source venv/bin/activate. Es posible que no desee usar siempre su virtualenv, y al usar este método, su indicador tiene el prefijo (venv)cuando lo está usando.
nyuszika7h
2
@ nyuszika7h Sabemos cómo usar virtualenv. Pero esto realmente responde a la pregunta y es una solución muy clara.
itsafire
8
@itsafire ¿Quién es "nosotros"? Le recomiendo que lea en.wikipedia.org/wiki/Weasel_word
nyuszika7h
3
De todos modos, no estoy de acuerdo, esta no es una "solución ordenada". Es un truco sin sentido.
nyuszika7h
19

Puede especificar la -topción ( --target) para especificar el directorio de destino. Consulte pip install --helppara obtener información detallada. Este es el comando que necesitas:

pip install -t path_to_your_home package-name

por ejemplo, para instalar say mxnet, en mi $HOMEdirectorio, escribo :

pip install -t /home/foivos/ mxnet
Foivos
fuente
Obteniendo un error distutils.errors.DistutilsOptionError: can't combine user with prefix, exec_prefix/home, or install_(plat)base. Qué significa eso?
Anthony Kong
Visite github.com/pypa/pip/issues/3826 para una discusión relacionada. No sé nada más sobre esto, pero nunca encontré un problema en mis entornos.
Foivos el