ホームページ  >  記事  >  バックエンド開発  >  Pythonで不足しているライブラリを自動的にインポートする方法を学びます

Pythonで不足しているライブラリを自動的にインポートする方法を学びます

coldplay.xixi
coldplay.xixi転載
2020-11-02 17:27:571521ブラウズ

Python チュートリアル コラムでは、不足しているライブラリを自動的にインポートする方法を紹介します。

Pythonで不足しているライブラリを自動的にインポートする方法を学びます

インポートの失敗の問題は、通常 2 つのタイプに分類されます。1 つは、自分で作成したモジュール (つまり、サフィックス .py## が付いたファイル) をインポートする場合です。 #)、もう 1 つはサードパーティのライブラリをインポートすることです。この記事では主に 2 番目の状況について説明しますが、今後機会があれば、その他の関連トピックについても詳しく説明します。

Python

ライブラリのインポートに失敗する問題を解決するには、実際には、不足しているライブラリを実行環境 (仮想環境かどうかに注意してください) にインストールするか、以下を使用することが重要です。適切な代替案。この問題は 3 つの状況に分けられます: 1. 単一モジュール内にライブラリが存在しない

コードを記述するときに、サードパーティのライブラリ (

requests# など) を使用する必要がある場合。 ##) ですが、実際の実行環境にインストールされているかどうかがわからない場合は、次のようにすることができます。

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. サードパーティのライブラリを標準ライブラリまたは独自の手書きライブラリで置き換えることができない場合はどうすればよいですか?

3. 完了したプロジェクトに対してこれらの変更が許可されていない場合はどうすればよいですか?

ここでの質問は次のとおりです: 新しいマシンに展開したいプロジェクトがあります。これには多くのサードパーティ ライブラリが含まれていますが、マシンにはどれもプリインストールされていません。どうすればよいですか? ?

準拠プロジェクトの場合、慣例に従って、通常、プロジェクトのすべての依存ライブラリとその必要なバージョン番号を記録する「

requirements.txt

」ファイルが含まれています。これは、プロジェクトがリリースされる前に、コマンド

pipフリーズ >requirements.txt を使用して生成されます。 コマンド pip install -rrequirements.txt

を使用して (ファイルがあるディレクトリで実行するか、コマンドにファイル全体のパスを書きます)、すべてのファイルを自動的にインストールします。依存ライブラリ。優れています。

しかし、プロジェクトが準拠していない場合、またはその他の不運な理由でそのような文書がない場合はどうなるでしょうか?

愚かな方法は、プロジェクトを実行し、エラーが発生するのを待ち、インポート ライブラリが失敗した場合は手動でインストールし、プロジェクトを再度実行し、インポート ライブラリが失敗した場合はインストールするというものです。 on... …

3. 不足しているライブラリを自動的にインポートする

不足しているライブラリを自動的にインポートするより良い方法はありますか?

元のコードを変更せず、「

requirements.txt

」ファイルを必要とせずに、必要なライブラリを自動的にインポートする方法はありますか? ######もちろん!最初にエフェクトを見てみましょう:

tornado

を例として取り上げます。最初のステップからわかるように、まだインストールされていません。 Pythonで不足しているライブラリを自動的にインポートする方法を学びます 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(&quot;Installing&quot;, name)                try:                     result = os.system('pip install {}'.format(name))                    if result == 0:                        return import_module(name)                except Exception as e:                     print(&quot;Failed&quot;, e)            return Nonesys.meta_path.append(AutoInstall)复制代码</pre>

sys.meta_path

はこのコードで使用されています。最初にそれを出力しましょう。 、それが何であるかわかりますか?

Python 3

Pythonで不足しているライブラリを自動的にインポートする方法を学びますimport

メカニズムの検索プロセス中のおおよそのシーケンスは次のとおりです。
  1. インポートされたすべてのモジュールをキャッシュする sys.modules を調べます。

  2. sys.meta_path で検索します。カスタム ローダーをサポートします。

  3. sys.path で検索します。いくつかのライブラリが配置されているディレクトリ名を記録します

  4. 見つからない場合は、

    ImportErrorException をスローします

sys.meta_path は、Python のバージョンごとに異なります。たとえば、Python 2 ## では異なります。 # と Python 3 には大きな違いがあります。新しい Python 3 バージョン (3.4) では、カスタム ローダーは find_spec メソッドを実装する必要がありますが、それ以前のバージョンでは、使用されるバージョンは find_module です。

Pythonで不足しているライブラリを自動的にインポートする方法を学びます

上記のコードは、サードパーティ ライブラリを自動的にインポートできるカスタム クラス ライブラリ ローダー

AutoInstall です。なお、この方法では新しくインポートされたライブラリをすべて「ハイジャック」し、元のインポート方法を破壊してしまうため、奇妙な問題も発生する可能性があるので注意してください。

sys.meta_path は、Python プローブのアプリケーションです。プローブ、または import フック は、ほとんど注目されていない Python メカニズムですが、ネットワーク上にライブラリをロードしたり、インポート時にモジュールをテストしたりするなど、多くのことを行うことができます。不足しているライブラリの変更、自動インストール、監査情報のアップロード、読み込みの遅延など。

スペースの制限があるため、これ以上詳しくは説明しません。最後に、要約:

  1. try...以外の を使用して、単純なサードパーティ ライブラリのインポートまたは置換を実装できます

  2. 欠落している依存ライブラリ (
  3. requirements.txt

    など) がすべてわかったら、

  4. Use
  5. sys.meta_path を手動でインストールできます。

    不足しているライブラリを自動的にインポートします

関連する無料学習の推奨事項:

Python チュートリアル ###(ビデオ)# ########

以上がPythonで不足しているライブラリを自動的にインポートする方法を学びますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はjuejin.imで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。