Necesito instalar un paquete desde PyPi directamente dentro de mi script. Tal vez hay alguna función de módulo o distutils
( distribute
, pip
etc.) que me permite ejecutar algo así pypi.install('requests')
y las solicitudes se instalarán en mi virtualenv.
python
pip
python-module
pypi
chuwy
fuente
fuente
pip
nunca es una buena idea: el mero hecho de que todo su contenido esté en la_internal
versión 10 ...pip._internal
no está diseñado para ser importable, puede hacer cosas absolutamente al azar cuando se importa en otro programa.Respuestas:
La forma oficialmente recomendada de instalar paquetes desde un script es llamando a la interfaz de línea de comandos de pip a través de un subproceso. La mayoría de las otras respuestas presentadas aquí no son compatibles con pip . Además, desde pip v10, todo el código se ha movido a
pip._internal
precisamente para dejar en claro a los usuarios que el uso programático de pip no está permitido.Úselo
sys.executable
para asegurarse de que invocará lo mismopip
asociado con el tiempo de ejecución actual.fuente
También puedes usar algo como:
fuente
pip.main()
como lo haría en la línea de comando (pero con cada opción como una entrada separada en la lista, en lugar de una sola cadena). Y para especificar qué versión del paquete desea, haga lo mismo que en la línea de comando. Ej:pip.main(['install', 'pip==7.1.0'])
from pip._internal import main as pipmain
entonces puedes usarlopipmain()
como el obsoletopip.main()
ver stackoverflow.com/questions/43398961/…Si desea usar
pip
para instalar el paquete requerido e importarlo después de la instalación, puede usar este código:Si instaló un paquete como usuario, puede encontrar el problema de que no puede simplemente importar el paquete. Consulte ¿Cómo actualizar sys.path? para informacion adicional.
fuente
imp.reload(site)
meRuntimeError: dictionary changed size during iteration
pip uninstall <package_name>
. Todavía puedo desinstalarlo usando,pip.main
pero solo quería saber dónde instala el paquete.pip install requests[security]
:? No estaba seguro de si definiría correctamente los globales correctamente.pip.main
Ya no funciona. pip.pypa.io/en/latest/user_guide/#using-pip-from-your-programEsto debería funcionar:
fuente
[sys.executable, '-m', 'pip', 'install', name]
es asegurarse de obtener el pip "correcto" aquí.Agregué algo de manejo de excepciones a la respuesta de @ Aaron.
fuente
subprocess.call
modo que el código podría fallar.Usted define el módulo dependiente dentro de setup.py de su propio paquete con la opción "install_requires".
Si su paquete necesita que se genere algún script de consola, puede usar el punto de entrada "console_scripts" para generar un script de envoltura que se colocará dentro de la carpeta 'bin' (por ejemplo, de su entorno virtualenv).
fuente