2012-01-16 14 views
17

Uso un pip requirements file para mantener una lista de dependencias para mis proyectos.¿Cómo mantener las opciones de instalación de pip en el archivo de requisitos realizado por congelación de pip?

Ahora me encuentro tener que instalar una biblioteca utilizando pip install --install-option='some-setup.py.option'peropip freeze no registra estas opciones en su salida, que guardo en mi proyecto de requirements.txt. Esto causa problemas porque un simple pip install -r requirements.txt en una máquina nueva instala todas las dependencias sin proporcionar los argumentos requeridos para esta única biblioteca, y he perdido la operación simple de ida y vuelta.

Por lo tanto, mi parte es la pregunta 2:

  • ¿Hay una manera de mantener pip instalar opciones en la salida congelación de pepita de alguna manera?
  • Si no es así, ¿hay alguna forma de hackear manualmente el archivo de requisitos para agregar la opción de instalación? Estoy de acuerdo con perder la naturaleza de ida y vuelta de pip freeze si tengo que hacerlo, y pasar al mantenimiento manual del archivo de requisitos. Revisé el documentation pero no pude ver nada para ayudar.

detalles innecesarios, pero posiblemente interesantes siguen

Quiero instalar pymongo pero without building the C extension por lo que puede utilizarlo de forma asíncrona en una aplicación basada eventlet.

Instalar como se desee y construir requirements.txt:

(test)[email protected]:~/test$ pip install pymongo --install-option='--no_ext' 
Downloading/unpacking pymongo 
    Downloading pymongo-2.1.1.tar.gz (199Kb): 199Kb downloaded 
    Running setup.py egg_info for package pymongo 
Installing collected packages: pymongo 
    Running setup.py install for pymongo 
Successfully installed pymongo 
Cleaning up... 
(test)[email protected]:~/test$ pip freeze > requirements.txt 
(test)[email protected]:~/test$ cat requirements.txt 
bottle==0.10.7 
distribute==0.6.10 
eventlet==0.9.16 
greenlet==0.3.3 
lxml==2.3.3 
pymongo==2.1.1 
simplejson==2.3.2 
wsgiref==0.1.2 

En virtualenv nuevo, intenta instalar un mismo proyecto de requirements.txt. pip construye la extensión C para pymongo :(

(test2)[email protected]:~/test2$ pip install -r requirements.txt 
... 
Downloading/unpacking pymongo==2.1.1 (from -r requirements.txt (line 6)) 
    Downloading pymongo-2.1.1.tar.gz (199Kb): 199Kb downloaded 
    Running setup.py egg_info for package pymongo 
Installing collected packages: pymongo 
    Running setup.py install for pymongo 
    building 'bson._cbson' extension 
    gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -Ibson -I/usr/include/python2.6 -c bson/_cbsonmodule.c -o build/temp.linux-i686-2.6/bson/_cbsonmodule.o 
... 
Successfully installed pymongo 
Cleaning up... 

actualización Issue 271 se abrió contra PIP en abril de 2011 solicitando la posibilidad de especificar por línea --install-option en requirements.txt. Vota por el problema si tienes el mismo problema.

+0

si agrega manualmente --install-option = '- no_ext' al archivo de requisitos, ¿funciona? - si no, sospecho que necesitarás solicitar que los desarrolladores de pip agreguen esta funcionalidad (¡que es una gran idea!) – d3vid

+2

@ d3vid Eso no funciona, me temo. Ya hay una solicitud de función para esto, abierta en abril de 2011: https://github.com/pypa/pip/issues/271. Por favor agregue su +1 allí también. – Day

Respuesta

12

Desde la versión 7.0 (publicada 2015-05-21), pip tiene la capacidad de analizar --install-option y --global-option desde los archivos de requisitos. Ahora debería ser posible tener la siguiente línea en su requirements.txt:

pymongo==2.1.1 --install-option='--no_ext' 

Más información se puede encontrar here y here.

+1

Plz fix primer enlace a https://github.com/pypa/pip/blob/master/docs/reference/pip_install.rst#id40 – y0prst

+0

¿Qué versión de pip es esto? – hlin117

+0

@ hlin117 se parece a la versión 7.0 en adelante según [el primer enlace] (https://github.com/pypa/pip/blob/master/docs/reference/pip_install.rst#id40) – Day

5

Esto probablemente sea demasiado ingenuo, pero si no tiene problema con administrar manualmente los requisitos y las opciones correspondientes, ¿por qué no mantenerlos como un pequeño script de shell que incluya todo el encantamiento de pip? Sólo una solución temporal hasta que se escuche la solicitud de función :)

+1

Eso hace el truco mientras tanto sí. – Day

+0

Tengo el mismo problema, y ​​me siento un poco estúpido por no haberlo hecho. ¡Gracias por publicar esta sugerencia! – kungphu

+0

rompe la convención 'requirements.txt', que es una mierda porque rompe cosas como, por ejemplo, http://docs.saltstack.com/en/latest/ref/states/all/salt.states.pip_state.html#salt .states.pip_state.installed. Pero sí, aparentemente eso será necesario aquí. – Andrew

Cuestiones relacionadas