インポートの失敗の問題は、通常 2 つのタイプに分類されます。1 つは、自分で作成したモジュール (つまり、サフィックス .py## が付いたファイル) をインポートする場合です。 #)、もう 1 つはサードパーティのライブラリをインポートすることです。この記事では主に 2 番目の状況について説明しますが、今後機会があれば、その他の関連トピックについても詳しく説明します。
ライブラリのインポートに失敗する問題を解決するには、実際には、不足しているライブラリを実行環境 (仮想環境かどうかに注意してください) にインストールするか、以下を使用することが重要です。適切な代替案。この問題は 3 つの状況に分けられます: 1. 単一モジュール内にライブラリが存在しない
try: import requestsexcept ImportError: import os os.system('pip install requests') import requests复制代码
これを記述することの影響は、
要求 ライブラリが実行できない場合に発生します。見つかったら、最初にインストールして、再度インポートします。 一部のオープン ソース プロジェクトでは、次のような記述も見られることがあります (例として
json
ry: import simplejson as jsonexcept ImportError: import json复制代码
このように記述することの効果は、優先順位がサードパーティ ライブラリ
simplejson のインポートに指定されている場合、見つからない場合は、組み込みの標準ライブラリ json を使用します。
この書き方の利点は、追加のライブラリをインポートする必要がないことですが、使用時に 2 つのライブラリに互換性があることを確認する必要があるという欠点もあります。標準ライブラリに見つからない場合は、実行できません。
my_json.py
など) を作成してから、例外を実行することもできます。 ステートメントを使用してインポートします。
ry: import simplejson as jsonexcept ImportError: import my_json as json复制代码
暗号語はナンセンスを話すのは簡単ではありません。2 つの文: 学習教材が必要な場合、または技術的な質問がある場合は、「
クリック」2. にライブラリがありませんプロジェクト全体
上記のアイデアは開発中のプロジェクトを対象としていますが、いくつかの欠点があります: 1. 欠落している可能性のあるサードパーティ ライブラリごとにpip install
コード内の は、お勧めできません;2. サードパーティのライブラリを標準ライブラリまたは独自の手書きライブラリで置き換えることができない場合はどうすればよいですか?
requirements.txt
」ファイルが含まれています。これは、プロジェクトがリリースされる前に、コマンドpipフリーズ >requirements.txt を使用して生成されます。
コマンド
pip install -rrequirements.txt
しかし、プロジェクトが準拠していない場合、またはその他の不運な理由でそのような文書がない場合はどうなるでしょうか?
requirements.txt
」ファイルを必要とせずに、必要なライブラリを自動的にインポートする方法はありますか? ######もちろん!最初にエフェクトを見てみましょう:tornado
を例として取り上げます。最初のステップからわかるように、まだインストールされていません。 tornado##. #、2 番目の手順の後、
tornado を再度インポートすると、プログラムが自動的に tornado
をダウンロードしてインストールするため、エラーは報告されません。 autoinstall
は手書きのモジュールです。コードは次のとおりです。 <pre class="brush:php;toolbar:false"># 以下代码在 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)复制代码</pre>
はこのコードで使用されています。最初にそれを出力しましょう。 、それが何であるかわかりますか?
の import
メカニズムの検索プロセス中のおおよそのシーケンスは次のとおりです。インポートされたすべてのモジュールをキャッシュする
sys.modules を調べます。
sys.meta_path で検索します。カスタム ローダーをサポートします。
sys.path で検索します。いくつかのライブラリが配置されているディレクトリ名を記録します
ImportErrorException
をスローします
sys.meta_path
は、Python
のバージョンごとに異なります。たとえば、Python 2 ## では異なります。 # と
Python 3 には大きな違いがあります。新しい
Python 3 バージョン (3.4) では、カスタム ローダーは
find_spec メソッドを実装する必要がありますが、それ以前のバージョンでは、使用されるバージョンは
find_module です。
AutoInstall です。なお、この方法では新しくインポートされたライブラリをすべて「ハイジャック」し、元のインポート方法を破壊してしまうため、奇妙な問題も発生する可能性があるので注意してください。
sys.meta_path は、
Python プローブのアプリケーションです。プローブ、または
import フック は、ほとんど注目されていない
Python メカニズムですが、ネットワーク上にライブラリをロードしたり、インポート時にモジュールをテストしたりするなど、多くのことを行うことができます。不足しているライブラリの変更、自動インストール、監査情報のアップロード、読み込みの遅延など。
try...以外の を使用して、単純なサードパーティ ライブラリのインポートまたは置換を実装できます
など) がすべてわかったら、
不足しているライブラリを自動的にインポートします
関連する無料学習の推奨事項:Python チュートリアル ###(ビデオ)# ########
以上がPythonで不足しているライブラリを自動的にインポートする方法を学びますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。