Pregunta

Estoy trabajando con tela (0.9.4)+PIP (0.8.2) y necesito instalar algunos módulos de Python para múltiples servidores. Todos los servidores tienen una versión antigua de SetupTools (0.6C8) que debe actualizarse para el módulo Pymongo. Pymongo requiere setupTools> = 0.6c9.

Mi problema es que PIP comienza a la instalación con Pymongo en lugar de setuptools, lo que hace que PIP se detenga. El orden de módulo de módulo en el archivo de requisitos no parece ayudar.

requisitos.txt:

setuptools>=0.6c9
pymongo==1.9
simplejson==2.1.3

¿Hay alguna manera de especificar el orden de instalación para PIP, ya que no parece hacerlo correctamente por sí solo?

Esto se puede resolver con dos archivos de requisitos separados, pero sería bueno si no necesitara mantener múltiples archivos de requisitos ahora o en el futuro.

El problema persiste con PIP 0.8.3.

¿Fue útil?

Solución

Este es un truco tonto, pero podría funcionar. Escriba un script bash que lea desde su archivo de requisitos línea por línea y ejecute el comando pip en él.

#!/bin/bash
for line in $(cat requirements.txt)
do
  pip install $line -E /path/to/virtualenv
done

Otros consejos

Puedes usar:

cat requirements.txt | xargs pip install

Para permitir todo tipo de entradas (por ejemplo, paquetes de repositorios de GIT) en requisitos.txt debe usar el siguiente conjunto de comandos

cat requirements.txt | xargs -n 1 -L 1 pip install

-n 1 y -L 1 Las opciones son necesarias para instalar paquetes uno por uno y tratar cada línea en el archivo requisitos.txt como un elemento separado.

Lamentablemente, la sugerencia de actualización no funcionará. Si lees los otros detalles en https://github.com/pypa/pip/issues/24 Verás por qué

PIP construirá todos los paquetes primero, antes de intentar instalarlos. Entonces, con un archivo de requisitos como el siguiente

numpy==1.7.1
scipy==0.13.2
statsmodels==0.5.0

La construcción de statsmodels fallará con la siguiente declaración

ImportError: statsmodels requires numpy

La solución dada para llamar manualmente a PIP para cada entrada en el archivo de requisitos (a través de un script de shell) parece ser la única solución actual.

Pymongo requiere setuppools> = 0.6c9

¿Cómo lo sabes? Requiere construir o instalar? No dices qué versión de Pymongo estabas intentando instalar, pero mirando setup.py Archivo para la versión actual (3.2.2) No hay especificación de lo que Pymongo requiere ejecutar setup.py (setup_requires) ni lo que requiere instalar (install_requires). Sin dicha información, PIP no puede garantizar una versión específica de SetupTools. Si Pymongo requiere una versión específica de SetupTools para ejecutar su setup.py (en lugar de requerir que SetupTools se ejecute setup Función misma) entonces el otro problema es que hasta hace poco no había forma de especificar esto. Ahora hay especificaciones - PEP 518 - Especificar requisitos mínimos del sistema de compilación para proyectos de Python, que debe implementarse en breve en PIP - Implementar el soporte PEP 518 #3691.

En cuanto al orden de instalación, esto se solucionó en PIP 6.1.0;

De Instalación de PIP - Orden de instalación sección de la documentación de Pip:

A partir de V6.1.0, PIP instala dependencias antes que sus dependientes, es decir, en "orden topológico". Este es el único compromiso que PIP actualmente hace relacionados con el orden.

Y después:

Antes de V6.1.0, PIP no se comprometió con el orden de instalación.

Sin embargo, sin la especificación adecuada de los requisitos de Pymongo tampoco ayudará.

Siguiendo la solución de @Lukasrms: tuve que hacer esto para que PIP instale mis requisitos de una a, a tiempo:

cat requirements.txt | xargs -n 1 pip install

Si tiene comentarios en su archivo de requisitos, querrá usar:

grep -v "^#" requirements.txt | xargs pip install

Terminé ejecutando PIP dentro de VirtualEnv en lugar de usar "Pip -e" porque con -e PIP aún podía ver los paquetes de sitio de los servidores y eso obviamente estropeó algunas de las instalaciones.

También tuve problemas con los servidores sin VirtualEnvs. Incluso si instalé SetupTools con el comando PIP separado, Pymongo se negaría a instalarse.

Resolví esto instalando SetupTools por separado con Easy_Install, ya que esto parece ser un problema entre PIP y SetupTools.

Fragmentos de FabFile.py:

env.activate = "source %s/bin/activate" % virtualenv_path

_virtualenv("easy_install -U setuptools")
_virtualenv("pip install -r requirements.txt")

def _virtualenv(command)
    if env.virtualenv:
        sudo(env.activate + "&&" + command)
    else:
        sudo(command)

Tuve estos problemas con PIP 0.8.3 y 0.8.2.

Lo siento, mi primera respuesta fue incorrecta, porque tenía SetupTools> = 0.6C9.

Parece que no es posible porque el setup.py de Pymongo necesita setupTools> = 0.6c9, pero PIP solo ha descargado setupTools> = 0.6c9, y aún no está instalado.

Alguien discutió al respecto en el tema que señalé antes.

He creado un problema hace un problema al respecto: No corras egg_info a cada paquete en la lista de requisitos antes de instalar los paquetes anteriores.

Perdón por lo ruidoso.


Primera respuesta:

Actualice su PIP a la versión 0.8.3, tiene un Irctor de errores a la orden de instalación.

Ahora si actualizas todo funciona :-)

Mira las noticias aquí: http://www.pip-installer.org/en/0.8.3/news.html

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top