Installer le module python dans le code

j'ai besoin d'installer un paquet de PyPi directement dans mon script. Peut-être qu'il y a un module ou distutils ( distribute , pip etc.) qui me permet d'exécuter quelque chose comme pypi.install('requests') et les requêtes seront installées dans mon virtualenv.

176
demandé sur chuwy 2012-09-08 21:33:02

10 réponses

Vous pouvez également utiliser quelque chose comme:

import pip

def install(package):
    if hasattr(pip, 'main'):
        pip.main(['install', package])
    else:
        pip._internal.main(['install', package])

# Example
if __name__ == '__main__':
    install('argh')
297
répondu Rikard Anglerud 2018-08-17 11:37:29

Si vous voulez utiliser pip pour installer le package et l'importer après l'installation, vous pouvez utiliser ce code:

def install_and_import(package):
    import importlib
    try:
        importlib.import_module(package)
    except ImportError:
        import pip
        pip.main(['install', package])
    finally:
        globals()[package] = importlib.import_module(package)


install_and_import('transliterate')

Si vous avez installé un paquet en tant qu'utilisateur, vous pouvez rencontrer le problème que vous ne pouvez pas importer le package. Voir comment rafraîchir SAJR.chemin d'accès? pour plus d'informations.

60
répondu rominf 2017-05-23 12:18:30
La solution de

Rickard n'est pas supportée par l'équipe de développement pip et s'écrasera dans certains cas (par exemple multi threads). De plus, depuis que pip 10 le code a été déplacé à pip._internal afin d'indiquer clairement que cela n'est pas supporté, cette solution échouera donc avec une erreur d'importation sur "pip>=10.0.0".

la solution de Quantum est la façon préférée de résoudre le problème, mais son implémentation ne garantit pas qu'il appellera le bon pip.

cette solution garantit qu'il appelle le pip de l'interpréteur python exécutant le code.

import subprocess
import sys

def install(package):
    subprocess.call([sys.executable, "-m", "pip", "install", package])

il fait la même chose que la solution de Quantum, mais au lieu d'exécuter pip directement, il exécute le même exécutable python qui exécute le code et lui dit d'exécuter le module pip qu'il a installé et lui passe le reste des arguments.

32
répondu Aaron de Windt 2018-05-09 13:47:15

cela devrait fonctionner:

import subprocess

def install(name):
    subprocess.call(['pip', 'install', name])
12
répondu quantum 2012-09-08 17:52:29

vous définissez le module dépendant à l'intérieur du setup.py de votre propre paquet avec l'option" install_requires".

si votre paquet a besoin de générer un script console, vous pouvez utiliser le point d'entrée" console_scripts " pour générer un script d'enrubannage qui sera placé dans le dossier' bin ' (par exemple de votre environnement virtualenv).

7
répondu Andreas Jung 2012-09-08 17:38:59

j'espère que cette question est toujours valide. J'ai fait quelque chose comme ceci:

    import sys
    import os
    import site 

    try:
       import pip
    except ImportError:
       print "installing pip"
       cmd = "sudo easy_install pip"
       os.system(cmd)
       reload(site)

    try: 
       import requests
    except ImportError:
       print "no lib requests"
       import pip
       cmd = "sudo pip install requests"
       print "Requests package is missing\nPlease enter root password to install required package"
       os.system(cmd)
       reload(site)

le deuxième bloc d'essai peut être écrit dans la partie else du premier bloc d'essai aussi bien, cependant dans mon énoncé de problème je dois écrire deux blocs séparés.

3
répondu Umesh Kaushik 2016-12-12 11:38:38

je suppose que nous avons un pip sur notre machine, et essaiera de saisir la dépendance spécifique qui manque.. essayez cette méthode et dites-moi ce que vous en pensez.

import os
try: 
    import something
    .....
    .....
except ImportError as e:
    pip = lambda : os.system('pip install' + str(e)[15:])
    pip()

aussi, veuillez envisager de travailler avec le module pip lui-même si vous utilisez les fonctions lambda pour appliquer le mécanisme de l'importateur" conscient de lui-même". Il suffit de suivre cet extrait de code:)

try:
    import somthing
    ..........
    ..........
except ImportError as e:
    # importing pip module to handle pip functionalites
    import pip
    # create a lambda that import using pip by module_error_name=e[15:]
    installer = lambda : pip.main(['install', str(e)[15:])
    # create a lambda that import a module by linear_lambda_call
    importer = lambda x : __import__(str(x)).import_module()
    # install the module
    installer()
    # import the module
    importer()
1
répondu SysMurff 2018-05-08 19:17:55

vous pouvez installer en utilisant le module sys a well

import sys
!{sys.executable} -m pip install <package> --user
0
répondu Tom J Muthirenthi 2018-02-07 17:01:10

j'utilise le os.system pour émuler un terminal OS important un module car alors, vous pouvez utiliser le module dans tous les autres scripts.

par exemple, je crée un moteur de jeu qui tourne sur des scripts séparés ajoutés ensemble, la plupart de ces scripts utilisent Pygame et si l'utilisateur n'a pas pygame, le fichier de démarrage l'ajoutera en utilisant ce code:

import os
os.system('pip install pygame')

Malheureusement, je n'ai aucune idée sur la façon d'obtenir pip sur la machine de l'utilisateur si ce dépend de l'utilisateur ayant pip.

0
répondu X0FloH 2018-02-14 10:52:03

vous pouvez toujours télécharger

import os

puis droit toutes les commandes de terminal pour le télécharger à partir de là.

comme

while True:

code = input("")

os.system("code")

quoi que ce soit je ne suis pas sûr mais si vous ne savez même pas comment le faire en terminal comment allez-vous le faire en python.

-10
répondu techset 2016-11-01 21:32:09