python - mac - Evite que pip falle en un solo paquete al instalar con requirements.txt
upgrade pip windows (4)
Estoy instalando paquetes desde requirements.txt
instalación de pip -r requirements.txt
El archivo requirements.txt dice:
Pillow
lxml
cssselect
jieba
beautifulsoup
nltk
lxml
es el único paquete que no se puede instalar y esto lleva a que todo falle (los resultados esperados lo señalan los larsks en los comentarios). Sin embargo, después de que lxml
falla, pip
aún se ejecuta y descarga el resto de los paquetes.
Por lo que entiendo, el comando pip install -r requirements.txt
fallará si alguno de los paquetes enumerados en los requirements.txt
no se instala.
¿Hay algún argumento que pueda aprobar al ejecutar pip install -r requirements.txt
para decirle que instale lo que pueda y omita los paquetes que no puede, o para salir tan pronto como vea que algo falla?
¿Tiene requisitos para usar lxml? Aquí están para la instalación:
sudo apt-get install libxml2-dev libxslt-dev python-dev
Si usa Windows o Mac, puede verificar eso también. Alternativamente, establecer STATIC_DEPS = true descargará y compilará ambas bibliotecas automáticamente. (C)
http://lxml.de/installation.html
Ejecutar cada línea con la pip install
puede ser una solución.
cat requirements.txt | xargs -n 1 pip install
Nota: -a
parámetro no está disponible en MacOS, por lo que el gato viejo es más portátil.
La solución xargs
funciona pero puede tener problemas de portabilidad (BSD / GNU) y / o ser engorrosa si tiene comentarios o líneas en blanco en su archivo de requisitos.
En cuanto al uso en el que se requeriría tal comportamiento, utilizo, por ejemplo, dos archivos de requisitos separados, uno que solo enumera las dependencias centrales que deben instalarse siempre y otro archivo con dependencias no esenciales que están en el 90% de los casos no es necesario para la mayoría de los casos de uso. Eso sería un equivalente de la sección Recommends
de un paquete Debian.
Uso el siguiente script de shell (requiere sed
) para instalar dependencias opcionales :
#!/bin/sh
while read dependency; do
dependency_stripped="$(echo "${dependency}" | sed -e ''s/^[[:space:]]*//'' -e ''s/[[:space:]]*$//'')"
# Skip comments
if [[ $dependency_stripped == /#* ]]; then
continue
# Skip blank lines
elif [ -z "$dependency_stripped" ]; then
continue
else
if pip install "$dependency_stripped"; then
echo "$dependency_stripped is installed"
else
echo "Could not install $dependency_stripped, skipping"
fi
fi
done < recommends.txt
Para ventanas:
# This code install line by line a list of pip package
import sys
import pip
def install(package):
pip.main([''install'', package])
if __name__ == ''__main__'':
with open(sys.argv[1]) as f:
for line in f:
install(line)