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 pipinstalar el paquete en otro lugar que no sea el predeterminado site-packages?

pipNO 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-installedopción debería evitar que pip intente desinstalar paquetes ya instalados.mkvirtualenv --python=/usr/bin/python3.5 env_nameRespuestas:
Utilizar:
También puede usar
--ignore-installedpara forzar la reinstalación de todas las dependencias con este nuevo prefijo. Puedes usar--install-optionvarias veces para agregar cualquiera de las opciones que puedes usarpython setup.py install(--prefixprobablemente sea lo que quieras, pero hay muchas más opciones que puedes usar).fuente
pip freezede ver el directorio alternativo?PYTHONPATH=$PREFIX_PATH/lib/python2.6/site-packages pip freezedebería verlos.--prefix=$PREFIX_PATHno parece permitir tener un control total del directorio de instalación ya que se le agrega un sufijo específico del sistema (\Lib\site-packagesen 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\defaultaPYTHONPATHpara 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=$PATHopción?targetes una opción de pip, y todo lo que ingrese seinstall-optionpasará asetup.py install command. Básicamentetargetes la ubicación personalizada de los paquetes del sitio.--targetpuede resultar en una instalación parcial, ya que no instalará ningún archivo de scripts / datos incluido en el prefijo especificado. Parece que pasa--prefixcon--install-optiones la única forma adecuada para tener un control total sobre las instalaciones utilizadas prefijo.En lugar de la
--targetopción o la--install-optionsopció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
PYTHONUSERBASEdirectorio en su entorno antes de ejecutar el comando, utilizandoexport PYTHONUSERBASE=/path/to/install/to)Este sistema utiliza la muy útil
--useropción que dice que para hacer losbin,lib,sharey otros directorios que cabe esperar bajo un prefijo personalizado en lugar de$HOME/.local.A continuación, puede añadir a su
PATH,PYTHONPATHy 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
--upgradey--ignore-installedsi los paquetes de los que esto depende requieren la instalación de versiones más recientes en elPYTHONUSERBASEdirectorio, para anular las versiones proporcionadas por el sistema.Un ejemplo completo:
... para instalar
scipyynumpyempaquetar las versiones más recientes en un directorio que luego puede incluir en suPYTHONPATHgusto (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
/bincarpeta que crea el pip, la--usercrea como lo hace--PREFIXmientras--targetque no.--ignore-installedes necesario.--editablelas instalaciones locales.sudesplazarse (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/packagescomo 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.confpara 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
--prefixallí, porque tengo un directorio "local" en un servidor compartido en el directorio de inicio, y fue utilizado como prefijoeasy_installantes de mudarmepip. Sistema$PATHy$PYTHONPATHse configuraron antes. En lugar deinstall-option=--install-purelib=/blahesta nuevatarget=/blahopción / interruptor. También es agradable, pero a veces solo necesitas un reemplazo para--prefixusar consetup.pyoeasy_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
-tes la abreviatura de--targetNadie parece haber mencionado la opción -t, pero esa es la más fácil:
fuente
-topción es la versión corta de la--targetopció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
--useropció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--prefixopción :donde
$PREFIX_PATHes 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.prefixconfiguració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.7directorio. Creé un directorio "bin" debajo y establecí directivas para distutils:entonces (
-Ise usa para forzar la instalación a pesar de fallas anteriores / instalación local):Luego agregué
/usr/local/lib/python2.7/bina$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 python3Iró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-installeddebido a esfuerzos anteriores, funcionó para mí:python -m pip install --user --install-option="--prefix='/myFunkyApp/lib'" --ignore-installed <package-name>Con pip
v1.5.6en Pythonv2.7.3(GNU / Linux), la opción--rootpermite 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
-eo--editablees que-eenlaza 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