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
hacer pip
instalar el paquete en otro lugar que no sea el predeterminado site-packages
?
pip
NO intente eliminar una versión anterior de un directorio no personalizado. Por ejemplo, uno para todo el sistema, donde no tiene permisos de escritura. Hasta ahora solo logré esto coneasy_install
...--ignore-installed
opción debería evitar que pip intente desinstalar paquetes ya instalados.mkvirtualenv --python=/usr/bin/python3.5 env_name
Respuestas:
Utilizar:
También puede usar
--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 usarpython setup.py install
(--prefix
probablemente sea lo que quieras, pero hay muchas más opciones que puedes usar).fuente
pip freeze
de ver el directorio alternativo?PYTHONPATH=$PREFIX_PATH/lib/python2.6/site-packages pip freeze
debería verlos.--prefix=$PREFIX_PATH
no parece permitir tener un control total del directorio de instalación ya que se le agrega un sufijo específico del sistema (\Lib\site-packages
en Windows, por ejemplo). ¿Hay alguna manera de especificar un directorio específico?El interruptor --target es lo que estás buscando:
Pero aún necesita agregar
d:\somewhere\other\than\the\default
aPYTHONPATH
para usarlos realmente desde esa ubicación.Pip de actualización si el interruptor de destino no está disponible:
En Linux u OS X:
En Windows (esto soluciona un problema ):
fuente
pip install --upgrade pip
!--install-option="--prefix=$PREFIX_PATH"
mencionado por @Ian Bicking y la--target=$PATH
opción?target
es una opción de pip, y todo lo que ingrese seinstall-option
pasará asetup.py install command
. Básicamentetarget
es la ubicación personalizada de los paquetes del sitio.--target
puede resultar en una instalación parcial, ya que no instalará ningún archivo de scripts / datos incluido en el prefijo especificado. Parece que pasa--prefix
con--install-option
es la única forma adecuada para tener un control total sobre las instalaciones utilizadas prefijo.En lugar de la
--target
opción o la--install-options
opción, 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 ):(O configure el
PYTHONUSERBASE
directorio en su entorno antes de ejecutar el comando, utilizandoexport PYTHONUSERBASE=/path/to/install/to
)Este sistema utiliza la muy útil
--user
opción que dice que para hacer losbin
,lib
,share
y otros directorios que cabe esperar bajo un prefijo personalizado en lugar de$HOME/.local
.A continuación, puede añadir a su
PATH
,PYTHONPATH
y otras variables como lo haría un directorio de instalación normal.Tenga en cuenta que también es posible que deba especificar las opciones
--upgrade
y--ignore-installed
si los paquetes de los que esto depende requieren la instalación de versiones más recientes en elPYTHONUSERBASE
directorio, para anular las versiones proporcionadas por el sistema.Un ejemplo completo:
... para instalar
scipy
ynumpy
empaquetar las versiones más recientes en un directorio que luego puede incluir en suPYTHONPATH
gusto (usando bash y para python 2.6 en CentOS 6 para este ejemplo):¡Usar virtualenv sigue siendo una solución mejor y más ordenada!
fuente
/bin
carpeta que crea el pip, la--user
crea como lo hace--PREFIX
mientras--target
que no.--ignore-installed
es necesario.--editable
las instalaciones locales.su
desplazarse (lo que puede ser problemático en los contenedores, por ejemplo).La instalación de un paquete Python a menudo solo incluye algunos archivos Python puros. Si el paquete incluye datos, scripts y / o ejecutables, estos se instalan en diferentes directorios de los archivos Python puros.
Suponiendo que su paquete no tiene datos / scripts / ejecutables, y que desea que entren sus archivos de Python
/python/packages/package_name
(y no algunos subdirectorios a unos niveles por debajo/python/packages
como cuando los usa--prefix
), puede usar el comando de una sola vez:Si desea que todos (o la mayoría) de sus paquetes vayan allí, puede editarlos
~/.pip/pip.conf
para incluir:De esa manera no puede olvidarse de tener que especificarlo una y otra vez.
Todos los archivos ejecutables / datos / scripts incluidos en el paquete aún irán a sus lugares predeterminados a menos que especifique opciones de instalación adicionales (
--prefix
/--install-data
/--install-scripts
, etc., para obtener detalles, consulte las opciones de instalación personalizadas ).fuente
--prefix
allí, porque tengo un directorio "local" en un servidor compartido en el directorio de inicio, y fue utilizado como prefijoeasy_install
antes de mudarmepip
. Sistema$PATH
y$PYTHONPATH
se configuraron antes. En lugar deinstall-option=--install-purelib=/blah
esta nuevatarget=/blah
opción / interruptor. También es agradable, pero a veces solo necesitas un reemplazo para--prefix
usar consetup.py
oeasy_install
.Para instalar pip una biblioteca exactamente donde la quería, navegué a la ubicación donde quería el directorio con el terminal y luego utilicé
La lógica que tomé de esta página: https://cloud.google.com/appengine/docs/python/googlecloudstorageclient/download
fuente
-t
es la abreviatura de--target
Nadie parece haber mencionado la opción -t, pero esa es la más fácil:
fuente
-t
opción es la versión corta de la--target
opción que se ha descrito en otra respuesta ( stackoverflow.com/a/19404371/594053 ) :)Solo agregue un punto a la respuesta de @Ian Bicking:
Utilizando el
--user
opción para especificar el directorio instalado también funciona si se desea instalar algún paquete de Python en el directorio principal (sin derecho de usuario de sudo) en el servidor remoto.P.ej,
El comando instalará el paquete en uno de los directorios que figuran en su PYTHONPATH.
fuente
Probé estas opciones con python3.5 y pip 9.0.3:
pip install --target / myfolder [paquetes]
Instala TODOS los paquetes, incluidas las dependencias en / myfolder. No tiene en cuenta que los paquetes dependientes ya están instalados en otra parte de Python. Encontrará paquetes de / myfolder / [package_name]. En caso de que tenga varias versiones de Python, esto no lo tiene en cuenta (no hay versión de Python en el nombre de la carpeta del paquete).
pip install --prefix / myfolder [paquetes]
Los cheques son dependencias ya instaladas. Instalará paquetes en /myfolder/lib/python3.5/site-packages/[packages]
pip install --root / myfolder [paquetes]
Comprueba dependencias como --prefix pero la ubicación de instalación será /myfolder/usr/local/lib/python3.5/site-packages/[package_name].
pip install --user [paquetes]
Instalará paquetes en $ HOME: /home/[USERfont>/.local/lib/python3.5/site-packages Python busca automáticamente desde esta ruta .local para que no necesite ponerlo en su PYTHONPATH.
=> En la mayoría de los casos, el usuario es la mejor opción para usar. En caso de que la carpeta de inicio no se pueda usar por alguna razón, entonces --prefix.
fuente
Las versiones más recientes de
pip
(8 o posterior) pueden usar directamente la--prefix
opción :donde
$PREFIX_PATH
es el prefijo de instalación donde se colocan lib, bin y otras carpetas de nivel superior.fuente
o
fuente
Para agregar al consejo ya bueno, ya que tuve un problema al instalar IPython cuando no tenía permisos de escritura para
/usr/local
.pip usa distutils para hacer su instalación y este hilo discute cómo eso puede causar un problema ya que se basa en
sys.prefix
configuración.Mi problema ocurrió cuando la instalación de IPython intentó escribir en '/ usr / local / share / man / man1' sin permiso . Como la instalación falló, no parecía 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 tratando de instalar esto para varios usuarios y me dieron permiso de escritura en el
/usr/local/lib/python2.7
directorio. Creé un directorio "bin" debajo y establecí directivas para distutils:entonces (
-I
se usa para forzar la instalación a pesar de fallas anteriores / instalación local):Luego agregué
/usr/local/lib/python2.7/bin
a$PATH
.Pensé que incluiría esto en caso de que alguien más tenga problemas similares en una máquina a la que no tienen acceso de sudo.
fuente
Si está utilizando brew con python, desafortunadamente, pip / pip3 se envía con opciones muy limitadas. No tiene las opciones --install-option, --target, --user como se mencionó anteriormente.
Puede encontrar esta línea muy engorrosa. Sugiero usar pyenv para la administración. Si estas usando
brew upgrade python python3
Irónicamente, en realidad estás degradando la funcionalidad de pip.
(Publico esta respuesta, simplemente porque pip en mi mac osx no tiene la opción --target, y he pasado horas reparándola)
fuente
ignore-installed
debido a esfuerzos anteriores, funcionó para mí:python -m pip install --user --install-option="--prefix='/myFunkyApp/lib'" --ignore-installed <package-name>
Con pip
v1.5.6
en Pythonv2.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. Intenta fi,fuente
Sugiero seguir la documentación y crear el archivo ~ / .pip / pip.conf. Tenga en cuenta que en la documentación faltan directorios de encabezado especificados, lo que conduce al siguiente error:
El contenido de trabajo completo del archivo conf es:
Desafortunadamente puedo instalarlo, pero cuando intento desinstalar pip me dice que no existe tal paquete para el proceso de desinstalación ... así que algo sigue mal pero el paquete va a su ubicación predefinida.
fuente
pip install /path/to/package/
Ahora es posible.
La diferencia con esto y al usar el indicador
-e
o--editable
es que-e
enlaza 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.
fuente
Encontré manera simple
fuente - https://pip.pypa.io/en/stable/reference/pip_install/
Lo probé con pip3 y funciona!
fuente