web-dev-qa-db-fra.com

l'installation de pip.main échoue avec l'objet 'module' qui n'a pas d'attribut 'main'

J'essaie d'installer quelques-uns des packages python à partir d'un script python et j'utilise pip.main(install) pour cela. Ci-dessous l'extrait de code

try:
    import requests
except:
    import pip
    pip.main(['install', '-q', 'requests==2.0.1','PyYAML==3.11'])
    import requests

J'ai essayé d'utiliser import principal de pip._internal et d'utiliser pipmain au lieu de pip.main (), mais cela n'a pas aidé.

Je suis sur pip version 9.0.1 et python 2.7

3
Sagar birla

les développeurs pip ne recommandent pas d'appeler pip depuis le programme . Et la méthode pip.main () a été supprimée de pip v10 . Une autre méthode consiste à exécuter le sous-processus pip in.

https://pip.pypa.io/fr/stable/user_guide/?highlight=_internal#using-pip-from-your-program

try:
    import requests
except:
    import sys
    import subprocess
    subprocess.check_call([sys.executable, '-m', 'pip', 'install', 'requests==2.0.1', 'PyYAML==3.11'])
    import requests
4
migimigi

J'ai eu le même problème et le simple fait d'exécuter la commande ci-dessous l'a résolu pour moi:

easy_install pip
2
kaxil

La réponse courte est de ne pas faire ça. Utilisez setup.py ou une instruction d'importation directe. 

Voici pourquoi cela ne fonctionne pas avec pip et comment le contourner si nécessaire.

pip affecte tout l'environnement. En fonction de la personne qui l'exécute et des raisons, ils peuvent vouloir ou non installer requests dans l'environnement dans lequel ils exécutent votre script. Cela pourrait être une mauvaise surprise que l'exécution de votre script affecte leur environnement python. 

L'installer comme un paquet (en utilisant python setup.py ou pip install) est une autre affaire. Il existe des méthodes bien établies pour installer d'autres packages à l'aide de requirements.txt et setup.py. Il est également attendu que l’installation d’un paquet installe ses dépendances. Vous pouvez en lire plus dans les tutoriels sur l’emballage de python.org

Si votre script comporte des dépendances mais que personne ne l’a besoin de l’installer, vous devez le lui indiquer dans le README.rst et/ou le requirements.txt. ou inclut simplement la déclaration d'importation et, lorsqu'ils obtiendront l'erreur, ils sauront quoi faire. Laissez-les contrôler quel environnement installe quels packages.

0
e.s.

La fonction pip.main a été déplacée et non supprimée par les développeurs de pip. La solution la plus votée n'est pas bonne. Passer de python -> Shell -> python n'est pas une bonne pratique lorsque vous pouvez simplement exécuter le code python directement. Essayez from pip._internal import main, vous pourrez alors utiliser cette fonction principale pour exécuter vos appels pip comme avant.

0
Lunulata