¿Cómo instalar paquetes usando pip de acuerdo con el archivo require.txt de un directorio local?

1083

Aqui esta el problema

Tengo un require.txt que se parece a:

BeautifulSoup==3.2.0
Django==1.3
Fabric==1.2.0
Jinja2==2.5.5
PyYAML==3.09
Pygments==1.4
SQLAlchemy==0.7.1
South==0.7.3
amqplib==0.6.1
anyjson==0.3
...

Tengo un directorio de archivo local que contiene todos los paquetes + otros.

He creado un nuevo virtualenv con

bin/virtualenv testing

Al activarlo, intenté instalar los paquetes de acuerdo con los requisitos.txt desde el directorio de archivo local.

source bin/activate
pip install -r /path/to/requirements.txt -f file:///path/to/archive/

Obtuve un resultado que parece indicar que la instalación está bien

Downloading/unpacking Fabric==1.2.0 (from -r ../testing/requirements.txt (line 3))
  Running setup.py egg_info for package Fabric
    warning: no previously-included files matching '*' found under directory 'docs/_build'
    warning: no files found matching 'fabfile.py'
Downloading/unpacking South==0.7.3 (from -r ../testing/requirements.txt (line 8))
  Running setup.py egg_info for package South
....

Pero la verificación posterior reveló que ninguno de los paquetes está instalado correctamente. No puedo importar el paquete, y ninguno se encuentra en el directorio de paquetes del sitio de mi virtualenv. Entonces, ¿qué salió mal?

kakarukeys
fuente
44
¿Has intentado usarlo --no-indexpara que ni siquiera vea PyPI?
Hugo Tavares
2
Has recortado el mensaje de error. Generalmente está cerca del fondo.
bukzor
Puede usar las rutas de acceso de archivo en lugar de los nombres de paquete, significa que tendrá que cambiar el archivo require.txt, pero mantenga el comando pip install igual.
asafge
99
La respuesta más votada (la de Mike Lyons) ni siquiera responde la pregunta . ¿Podrías aceptar la respuesta del codeape, que es la correcta?
Piotr Dobrogost
2
sorprendió a nadie más vinculado excepto pip.pypa.io/en/stable/user_guide/#requirements-files
MrMesees

Respuestas:

787

Esto funciona para mi:

$ pip install -r requirements.txt --no-index --find-links file:///tmp/packages

--no-index- Ignorar el índice del paquete (solo busca las --find-linksURL en su lugar).

-f, --find-links <URL>- Si se trata de una URL o ruta a un archivo html, analice los enlaces a los archivos. Si una ruta local o file://URL es un directorio, busque archivos en la lista del directorio.

codeape
fuente
77
Información sobre el --no-indexcomando pip help install --no-index Ignore package index (solo buscando --find-linksURLs en su lugar). Información sobre el --find-linkscomando pip help install -f , --find-links <url>si se trata de una url o ruta a un archivo html, analice los enlaces a los archivos. Si una ruta o archivo local: // url es un directorio, busque archivos en la lista del directorio.
AWrightIV
1
//, Esta podría ser una solución muy elegante, especialmente dada la eterna lucha con la comercialización: bitprophet.org/blog/2012/06/07/on-vendorizing
Nathan Basanese
Una advertencia con esto es que puede hacerlo pip install <some_module>sin usar, requirements.txtpero eso no se actualizará requirements.txt. Una alternativa podría ser actualizar un docker de modo que enumere todos los comandos de instalación de pip que se ejecutan para instalar dependencias.
ampersands
Lo intenté python -m pip install -r requirements.txtcuando estaba dentro del entorno venv activado. las cosas se instalaron sin problemas, pero cuando hago pip list no muestra esos paquetes, cuando estoy en el venv activo o incluso después de desactivar venv. Tampoco puedo usar esos paquetes. no sé qué pasa aquí
Shreyan Mehta
¿Está seguro de que se pythonrefiere al ejecutable de Python del entorno activado ( $ which python)?
codeape
1366

He leído lo anterior, me doy cuenta de que esta es una pregunta antigua, pero está totalmente sin resolver y todavía está en la parte superior de mis resultados de búsqueda de Google, así que aquí hay una respuesta que funciona para todos:

pip install -r /path/to/requirements.txt
Mike Lyons
fuente
284
Me doy cuenta de que esta respuesta no aborda la pregunta original, pero responde la pregunta que tuve cuando encontré esto en Google ...
Jonathan
8
@MikeLyons está bastante seguro de que la pregunta no ha cambiado: no hay un historial de edición.
Mark Amery
49
para aquellos a quienes les gusta saber lo que escriben, el -r en el comando solo significa "instalar desde un archivo de requisitos", y es un acceso directo para --requirement
Florent Chatterji
2
Cuando quiero actualizar un paquete (por ejemplo, Django), cambio la versión en mi archivo require.txt y luego lo ejecuto pip install -r /path/to/requirements.txt. Esto detecta el cambio, actualiza el paquete y deja todo lo demás solo.
Usuario
1
Si bien esto generalmente funciona, un par de sutilezas hacen que falle. Si falla alguna instalación para los paquetes requirements.txt, ninguno de ellos se instalará. Si un módulo requerido importa una dependencia durante su instalación (en lugar de simplemente enumerarlo como un requisito), fallará incluso si la dependencia lo precede en la lista de dependencias, haciendo que todos los módulos fallen. Probablemente sea un error importar un módulo dependiente durante la instalación, pero también es inesperado que las dependencias enumeradas requirements.txtno se instalen secuencialmente, sino todas a la vez.
iggie
130

Para virtualenv instalar todos los archivos en el archivo require.txt.

  1. cd al directorio donde se encuentra require.txt
  2. activa tu virtualenv
  3. ejecutar: pip install -r requirements.txt en su caparazón
Aaron Lelevier
fuente
3
"pyenv virtualenv requisitos de instalación de pip.txt no funciona" por el bien de Google ...
Jerad
Funciona para mí en lugar de otras respuestas, ty
Jo Eark
58

Tuve un problema similar. Intenté esto:

pip install -U -r requirements.txt 

(-U = actualizar si ya se había instalado)

Pero el problema continuó. Me di cuenta de que se perdieron algunas de las bibliotecas genéricas para el desarrollo.

sudo apt-get install libtiff5-dev libjpeg8-dev zlib1g-dev liblcms2-dev libwebp-dev tcl8.6-dev tk8.6-dev python-tk

No sé si esto te ayudaría.

enriquetaso
fuente
32
pip install -r requirements.txt

Para más detalles, consulte la opción de ayuda.

pip install --help

Podemos encontrar la opción '-r'

-r, --requirement Instalar desde el archivo de requisitos dado. Esta opción se puede usar varias veces.

Más información sobre algunas opciones de instalación de pip comúnmente utilizadas: (Esta es la opción de ayuda en el comando de instalación de pip)

ingrese la descripción de la imagen aquí

También lo anterior es el conjunto completo de opciones. Utilice pip install --help para obtener una lista completa de opciones.

Py_minion
fuente
26

Respuesta corta

pip install -r /path/to/requirements.txt

o en otra forma:

python -m pip install -r /path/to/requirements.txt

Explicación

Aquí, -res una forma abreviada --requirementy solicita la pipinstalación desde el requirementsarchivo dado .

pipcomenzará la instalación solo después de verificar la disponibilidad de todos los elementos enumerados en el requirementsarchivo y no comenzará la instalación incluso si uno requirementno está disponible.

Una solución alternativa para instalar los paquetes disponibles es instalar los paquetes enumerados uno por uno. Use el siguiente comando para eso. Se mostrará una advertencia de color rojo para notificarle sobre los paquetes no disponibles.

cat requirements.txt | xargs -n 1 pip install

Para ignorar los comentarios (líneas que comienzan con a #) y las líneas en blanco, use:

cat requirements.txt | cut -f1 -d"#" | sed '/^\s*$/d' | xargs -n 1 pip install
Safwan
fuente
20

A menudo, querrá una instalación rápida desde archivos locales, sin probar PyPI.

Primero, descargue los archivos que cumplan con sus requisitos:

$ pip install --download <DIR> -r requirements.txt

Luego, instale usando –find-linksy –no-index:

$ pip install --no-index --find-links=[file://]<DIR> -r requirements.txt
Jadav Bheda
fuente
no such option: --download
Max Malysh
12

Trabajo con muchos sistemas que los desarrolladores han pirateado "siguiendo las instrucciones que encontraron en Internet". Es extremadamente común que usted pipy usted pythonno estén buscando las mismas rutas / paquetes de sitio. Por esta razón, cuando encuentro extrañezas empiezo haciendo esto:

$ python -c 'import sys; print(sys.path)'
['', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu',
'/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old',
'/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages',
'/usr/lib/python2.7/dist-packages']

$ pip --version
pip 9.0.1 from /usr/local/lib/python2.7/dist-packages (python 2.7)

Ese es un sistema feliz .

A continuación se muestra un sistema infeliz . (O al menos es un sistema felizmente ignorante que hace que otros sean infelices).

$ pip --version
pip 9.0.1 from /usr/local/lib/python3.6/site-packages (python 3.6)

$ python -c 'import sys; print(sys.path)'
['', '/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python27.zip',
'/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7',
'/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin',
'/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac',
'/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages',
'/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk',
'/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old',
'/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload',
'/usr/local/lib/python2.7/site-packages']

$ which pip pip2 pip3
/usr/local/bin/pip
/usr/local/bin/pip3

Es infeliz porque pipes (python3.6 y) usando /usr/local/lib/python3.6/site-packageswhile pythones (python2.7 y) usando/usr/local/lib/python2.7/site-packages

Cuando quiero asegurarme de que estoy instalando requisitos en la python correcta , hago esto:

$ which -a python python2 python3
/usr/local/bin/python
/usr/bin/python
/usr/local/bin/python2
/usr/local/bin/python3

$ /usr/bin/python -m pip install -r requirements.txt

Has escuchado: "Si no está roto, no intentes arreglarlo". La versión de DevOps de eso es: "Si no lo rompió y puede solucionarlo, no intente solucionarlo".

Bruno Bronosky
fuente
10

en primer lugar, cree un entorno virtual

en python 3.6

virtualenv --python=/usr/bin/python3.6 <path/to/new/virtualenv/>

en python 2.7

virtualenv --python=/usr/bin/python2.7 <path/to/new/virtualenv/>

luego active el entorno e instale todos los paquetes disponibles en el archivo require.txt.

source <path/to/new/virtualenv>/bin/activate
pip install -r <path/to/requirement.txt>
Vas girish
fuente
9

Instalar el archivo require.txt dentro de virtual env con python 3:

Tuve el mismo problema. Intenté instalar el archivo require.txt dentro de un entorno virtual. Encontré la solución.

Inicialmente, creé mi entorno virtual de esta manera:

virtualenv -p python3 myenv

Activa el entorno usando:

source myenv/bin/activate

Ahora instalé requerimientos.txt usando:

pip3 install -r requirements.txt

La instalación fue exitosa y pude importar los módulos.

janu777
fuente
Enfrenté este problema al instalar el archivo de requisitos dentro de un entorno virtual. Ahora he modificado mi respuesta para abordar el problema
janu777
1
Utilizando Anaconda Python 3.6 en Windows, que tenía que hacer virtualenv -p python myenv, myenv\Scripts\activate.bat,pip install -r requirements.txt
bdforbes
1
En realidad, por el contrario, esto parece la única respuesta que hace responder a la parte de la pregunta acerca de la instalación deps definidos localmente en requirements.txtun virtualenv. ¿A menos que me falte algo? ¡Gracias de todos modos!
davnicwil
8

prueba esto

python -m pip install -r requirements.txt
Jema
fuente
7
pip install --user -r requirements.txt 

O

pip3 install --user -r requirements.txt 
usuario1460675
fuente
¿Es posible especificar --userdentro del requirements.txtarchivo?
liang