Apprenez à importer automatiquement les bibliothèques manquantes en python

coldplay.xixi
Libérer: 2020-11-02 17:27:57
avant
1477 Les gens l'ont consulté

La colonne

Tutoriel Python présente comment importer automatiquement les bibliothèques manquantes.

Apprenez à importer automatiquement les bibliothèques manquantes en python

Les problèmes d'échec d'importation sont généralement divisés en deux types : l'un consiste à importer des modules écrits par vous-même (c'est-à-dire des fichiers avec le suffixe .py), et l'autre consiste à importer Bibliothèque à trois. Cet article traite principalement de la deuxième situation. Si nous en avons l’occasion à l’avenir, nous aborderons en détail d’autres sujets connexes.

Pour résoudre le problème de l'échec de l'importation de la bibliothèque Python, la clé est d'installer la bibliothèque manquante dans l'environnement en cours d'exécution (faites attention s'il s'agit d'un environnement virtuel) ou d'utiliser une alternative appropriée. Ce problème se divise en trois situations :

1. Bibliothèques manquantes dans un seul module

Lors de l'écriture du code, si nous devons utiliser une bibliothèque tierce (telle que requests), Mais si vous n'êtes pas sûr que l'environnement d'exécution actuel l'ait installé, vous pouvez faire ceci :

try:    import requestsexcept ImportError:    import os
    os.system('pip install requests')    import requests复制代码
Copier après la connexion

L'effet d'écrire de cette façon est que si la bibliothèque requests est introuvable, installez-la d'abord, puis importez-le.

Dans certains projets open source, nous pouvons également voir l'écriture suivante (en prenant json comme exemple) :

ry:    import simplejson as jsonexcept ImportError:    import json复制代码
Copier après la connexion

L'effet d'écrire de cette façon est que les bibliothèques tierces sont importées d'abordsimplejson, s'il n'est pas trouvé, utilisez la bibliothèque standard intégrée json.

L'avantage de cette façon d'écrire est qu'il n'est pas nécessaire d'importer des bibliothèques supplémentaires, mais elle présente un inconvénient, c'est-à-dire qu'elle doit garantir que les deux bibliothèques sont compatibles lors de l'utilisation d'une bibliothèque alternative. ne peut pas être trouvé dans la bibliothèque standard, alors ce n'est pas réalisable.

Si vous ne trouvez vraiment pas de bibliothèque standard compatible, vous pouvez également écrire vous-même un module (comme my_json.py) pour obtenir ce que vous voulez, puis l'importer dans l'instruction except.

ry:    import simplejson as jsonexcept ImportError:    import my_json as json复制代码
Copier après la connexion

Les mots de code ne sont pas faciles à dire des bêtises. Si vous avez besoin de matériel d'apprentissage ou si vous avez des questions techniques, veuillez communiquer "Cliquez sur "

2. project

L'idée ci-dessus est destinée aux projets en cours de développement, mais elle présente plusieurs inconvénients :

1 Il n'est pas conseillé de pip install inclure toutes les bibliothèques tierces manquantes possibles dans le code ;

2. Que dois-je faire si une bibliothèque tierce ne peut pas être remplacée par la bibliothèque standard ou ma propre bibliothèque manuscrite ?

3. Que dois-je faire si ces modifications ne sont pas autorisées pour un projet terminé ?

La question ici est donc : il y a un projet que je souhaite déployer sur une nouvelle machine. Il implique de nombreuses bibliothèques tierces, mais aucune d'entre elles n'est préinstallée sur la machine. ?

Pour un projet conforme, selon convention, il contient généralement un fichier "requirements.txt" qui enregistre toutes les bibliothèques dépendantes du projet et leurs numéros de version requis. Celui-ci est généré à l'aide de la commande pip freeze > requirements.txt avant la sortie du projet.

Utilisez la commande pip install -r requirements.txt (exécutez-la dans le répertoire où se trouve le fichier, ou écrivez le chemin de l'intégralité du fichier dans la commande) pour installer automatiquement toutes les bibliothèques dépendantes.

Mais que se passe-t-il si le projet n'est pas conforme ou, pour une autre raison malheureuse, nous ne disposons pas d'une telle documentation ?

Une méthode stupide consiste à exécuter le projet, à attendre qu'il génère une erreur, et si une bibliothèque d'importation échoue, à l'installer manuellement, puis à réexécuter le projet, et si la bibliothèque d'importation échoue, à l'installer, et ainsi de suite. sur... …

3. Importer automatiquement toutes les bibliothèques manquantes

Existe-t-il une meilleure façon d'importer automatiquement les bibliothèques manquantes ?

Existe-t-il un moyen d'importer automatiquement les bibliothèques requises sans modifier le code d'origine et sans nécessiter le fichier "requirements.txt" ?

Bien sûr ! Jetons d'abord un coup d'œil à l'effet :

Apprenez à importer automatiquement les bibliothèques manquantes en python

Prenons tornado comme exemple. On voit dès la première étape que nous n'avons pas installé tornado. Après la deuxième étape, lors de l'importation à nouveau de tornado, le programme téléchargera et installera automatiquement tornado pour nous, donc aucune erreur ne sera signalée.

autoinstall est notre module manuscrit, le code est le suivant :

# 以下代码在 python 3.6.1 版本验证通过import sysimport osfrom importlib import import_moduleclass AutoInstall():
    _loaded = set()    @classmethod
    def find_spec(cls, name, path, target=None):
            if path is None and name not in cls._loaded:
                cls._loaded.add(name)
                print("Installing", name)                try:
                    result = os.system('pip install {}'.format(name))                    if result == 0:                        return import_module(name)                except Exception as e:
                    print("Failed", e)            return Nonesys.meta_path.append(AutoInstall)复制代码
Copier après la connexion

sys.meta_path est utilisé dans ce code, imprimons-le d'abord pour voir ce que c'est ? Le mécanisme

Apprenez à importer automatiquement les bibliothèques manquantes en python

  1. Python 3 de import se déroule à peu près dans l'ordre suivant pendant le processus de recherche :

  2. Regardez dans sys.modules, qui met en cache tous les modules importés

  3. Regardez dans sys.meta_path, qui prend en charge les chargeurs personnalisés

  4. Recherchez dans sys.path, qui enregistre les noms de répertoires de certaines bibliothèques

  5. S'il n'est pas trouvé, lancez une ImportError exception

Il convient de noter que sys.meta_path est différent dans les différentes versions Python Par exemple, il est très différent entre Python 2 et Python 3 dans les versions plus récentes de Python 3  ; (3.4+), les chargeurs personnalisés doivent implémenter la méthode find_spec, alors que les versions antérieures utilisaient find_module.

Apprenez à importer automatiquement les bibliothèques manquantes en python

Le code ci-dessus est un chargeur de bibliothèque de classes personnalisé AutoInstall, qui peut importer automatiquement des bibliothèques tierces. Il convient de noter que cette méthode "piratera" toutes les bibliothèques nouvellement importées et détruira la méthode d'importation d'origine, donc des problèmes étranges peuvent également survenir, alors faites attention.

sys.meta_path est une application de la sonde Python. Les sondes, ou import hook, sont des mécanismes Python qui n'attirent presque aucune attention, mais ils peuvent faire beaucoup de choses, comme charger des bibliothèques sur le réseau, modifier des modules lors de leur importation, installer automatiquement des bibliothèques manquantes et télécharger des informations d'audit. , chargement paresseux, et plus encore.

En raison du manque de place, nous ne développerons pas davantage. Enfin, pour résumer :

  1. Vous pouvez utiliser la méthode try…except pour implémenter une simple importation de bibliothèque tierce ou le remplacement de

  2. tous connus bibliothèques dépendantes manquantes (telles que requirements.txt), vous pouvez installer manuellement

  3. Utilisez sys.meta_path pour importer automatiquement toute bibliothèque manquante

Recommandations d'apprentissage gratuites associées : Tutoriel Python(vidéo)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:juejin.im
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!