Table des matières
1. Bibliothèques manquantes dans un seul module
2. project
3. Importer automatiquement toutes les bibliothèques manquantes
Maison développement back-end Tutoriel Python Apprenez à importer automatiquement les bibliothèques manquantes en python

Apprenez à importer automatiquement les bibliothèques manquantes en python

Nov 02, 2020 pm 05:27 PM
python Importer une bibliothèque

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!

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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment intégrer efficacement les services Node.js ou Python sous l'architecture LAMP? Comment intégrer efficacement les services Node.js ou Python sous l'architecture LAMP? Apr 01, 2025 pm 02:48 PM

De nombreux développeurs de sites Web sont confrontés au problème de l'intégration de Node.js ou des services Python sous l'architecture de lampe: la lampe existante (Linux Apache MySQL PHP) a besoin d'un site Web ...

Comment résoudre le problème des autorisations rencontré lors de la visualisation de la version Python dans le terminal Linux? Comment résoudre le problème des autorisations rencontré lors de la visualisation de la version Python dans le terminal Linux? Apr 01, 2025 pm 05:09 PM

Solution aux problèmes d'autorisation Lors de la visualisation de la version Python dans Linux Terminal Lorsque vous essayez d'afficher la version Python dans Linux Terminal, entrez Python ...

Quelle est la raison pour laquelle les fichiers de stockage persistants de pipeline ne peuvent pas être écrits lors de l'utilisation du robot Scapy? Quelle est la raison pour laquelle les fichiers de stockage persistants de pipeline ne peuvent pas être écrits lors de l'utilisation du robot Scapy? Apr 01, 2025 pm 04:03 PM

Lorsque vous utilisez Scapy Crawler, la raison pour laquelle les fichiers de stockage persistants ne peuvent pas être écrits? Discussion Lorsque vous apprenez à utiliser Scapy Crawler pour les robots de données, vous rencontrez souvent un ...

Dessin graphique de sablier Python: comment éviter les erreurs variables non définies? Dessin graphique de sablier Python: comment éviter les erreurs variables non définies? Apr 01, 2025 pm 06:27 PM

Précision avec Python: Source de sablier Dessin graphique et vérification d'entrée Cet article résoudra le problème de définition variable rencontré par un novice Python dans le programme de dessin graphique de sablier. Code...

Quelle est la raison pour laquelle le pool de processus Python gère les demandes TCP simultanées et fait coincé le client? Quelle est la raison pour laquelle le pool de processus Python gère les demandes TCP simultanées et fait coincé le client? Apr 01, 2025 pm 04:09 PM

Python Process Pool gère les demandes TCP simultanées qui font coincé le client. Lorsque vous utilisez Python pour la programmation réseau, il est crucial de gérer efficacement les demandes TCP simultanées. ...

Comment afficher les fonctions originales encapsulées en interne par Python Functools.Partial Objet? Comment afficher les fonctions originales encapsulées en interne par Python Functools.Partial Objet? Apr 01, 2025 pm 04:15 PM

Explorez profondément la méthode de visualisation de Python Functools.Partial Objet dans Functools.Partial en utilisant Python ...

Python multiplateform de bureau de bureau de bureau: quelle bibliothèque GUI est la meilleure pour vous? Python multiplateform de bureau de bureau de bureau: quelle bibliothèque GUI est la meilleure pour vous? Apr 01, 2025 pm 05:24 PM

Choix de la bibliothèque de développement d'applications de bureau multiplateforme Python De nombreux développeurs Python souhaitent développer des applications de bureau pouvant s'exécuter sur Windows et Linux Systems ...

Google et AWS fournissent-ils des sources publiques d'image PYPI? Google et AWS fournissent-ils des sources publiques d'image PYPI? Apr 01, 2025 pm 05:15 PM

De nombreux développeurs s'appuient sur PYPI (PythonPackageIndex) ...

See all articles