¿Cómo instalar automáticamente los paquetes requeridos desde un script de Python según sea necesario?

¿Hay algo en Python o Linux que básicamente indique al sistema que “instale lo que sea necesario”? Básicamente, me resulta molesto instalar paquetes de Python para cada nuevo script / sistema / servidor en el que trabajo. Cada vez que termino haciendo un sudo pip o un apt-get o dnf de todos modos. ¿Por qué no automatizar eso dentro del propio script? Siempre que surja un error de “no se encontró ningún paquete”, pase el nombre de la biblioteca a la instrucción de instalación. Es esto ahi

PD: Sé que la ventana acoplable existe, pero estoy hablando a nivel de script / python o un nivel de sistema directo con fines puramente de ejecución.

Gracias

La mejor manera que conozco es crear un archivo requirements.txt enumerar el nombre de todos los paquetes e instalarlo usando pip

 pip install -r requirements.txt 

Ejemplo requirements.txt :

 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 ... 

Puede usar setuptools para instalar dependencias automáticamente cuando instala su proyecto personalizado en una máquina nueva. El archivo de requisitos funciona bien si todo lo que quiere hacer es instalar algunos paquetes PyPI .

Aquí hay una buena comparación entre los dos. Desde el mismo enlace puede ver que si su proyecto tiene dos paquetes dependientes A y B , todo lo que tiene que incluir en su archivo setp.py es una línea

 install_requires=[ 'A', 'B' ] 

Por supuesto, setuptools puede hacer mucho más. Puede incluir configuraciones para bibliotecas externas (por ejemplo, archivos C), dependencias que no sean PyPI, etc. La documentación proporciona una descripción detallada de las dependencias de instalación. También hay un tutorial realmente bueno sobre cómo comenzar con el empaquetado de Python.

De su ejemplo, un archivo setup.py típico se vería así.

 from setuptools import setup setup(name='funniest', version='0.1', description='The funniest joke in the world', url='http://github.com/storborg/funniest', author='Flying Circus', author_email='flyingcircus@example.com', license='MIT', packages=['funniest'], install_requires=[ 'markdown', ], zip_safe=False) 

En conclusión, es muy sencillo comenzar con setuptools . Este paquete puede hacer que sea bastante fácil migrar su código a una nueva máquina.