J'ai besoin d'installer un package de PyPi directement dans mon script. Peut-être qu'il y a un module ou une fonctionnalité distutils
( distribute
, pip
etc.) qui me permet d'exécuter simplement quelque chose comme pypi.install('requests')
et les demandes seront installées dans mon virtualenv.
python
pip
python-module
pypi
chuwy
la source
la source
pip
n'est jamais une bonne idée - le simple fait que tout son contenu soit à_internal
partir de la version 10 ...pip._internal
n'est pas conçu pour être importable, il peut faire des choses absolument aléatoires lorsqu'il est importé dans un autre programme.Réponses:
La façon officiellement recommandée d'installer des packages à partir d'un script consiste à appeler l'interface de ligne de commande de pip via un sous-processus. La plupart des autres réponses présentées ici ne sont pas prises en charge par pip . De plus, depuis pip v10, tout le code a été déplacé
pip._internal
précisément afin de faire comprendre aux utilisateurs que l'utilisation programmatique de pip n'est pas autorisée.Utilisez
sys.executable
pour vous assurer que vous appellerez la même chosepip
associée à l'exécution actuelle.la source
Vous pouvez également utiliser quelque chose comme:
la source
pip.main()
comme vous le feriez sur la ligne de commande (mais avec chaque option comme une entrée distincte dans la liste, au lieu d'une seule chaîne). Et pour spécifier la version du package que vous voulez, faites la même chose que sur la ligne de commande. Ex:pip.main(['install', 'pip==7.1.0'])
from pip._internal import main as pipmain
alors vous pouvez utiliserpipmain()
tout comme le dépréciépip.main()
voir stackoverflow.com/questions/43398961/…Si vous souhaitez utiliser
pip
pour installer le package requis et l'importer après l'installation, vous pouvez utiliser ce code:Si vous avez installé un package en tant qu'utilisateur, vous pouvez rencontrer le problème que vous ne pouvez pas simplement importer le package. Voir Comment actualiser sys.path? pour plus d'informations.
la source
imp.reload(site)
me faitRuntimeError: dictionary changed size during iteration
pip uninstall <package_name>
. Je peux toujours le désinstaller en utilisantpip.main
mais je voulais juste savoir où installer le package?pip install requests[security]
:? Je ne savais pas si cela définirait correctement les globales correctement.pip.main
ne fonctionne plus. pip.pypa.io/en/latest/user_guide/#using-pip-from-your-programCela devrait fonctionner:
la source
[sys.executable, '-m', 'pip', 'install', name]
c'est s'assurer d'avoir le "bon" pip ici.j'ai ajouté une gestion des exceptions à la réponse de @ Aaron.
la source
subprocess.call
pour que le code puisse échouer.Vous définissez le module dépendant dans le setup.py de votre propre package avec l'option "install_requires".
Si votre package doit avoir un script de console généré, vous pouvez utiliser le point d'entrée "console_scripts" afin de générer un script wrapper qui sera placé dans le dossier "bin" (par exemple de votre environnement virtualenv).
la source