Pythonモジュール(クロスディレクトリ)呼び出しの概要

システムモジュール呼び出し

モジュールの呼び出しについて言えば、誰もがインポートの基本を理解している必要があります。これは、インポート時間、SeleniumインポートWebドライバーなどのプロジェクトで非常に一般的です。from... import ... / import。の構文をよく使用します。 。Pythonでシステムモジュールを引用するには、システムモジュールをインポートした後、モジュールで定義されているメソッドを呼び出すことができます。次に例を示します。

時間からインポートctime

印刷ctime()

インポート時間

print time.ctime()
の最終的な目的は、現在の時刻を取得して出力することです。

メソッド1では、timeモジュールを導入し、その下にctimeメソッドをインポートすることで、ctime()メソッドの呼び出しを実現します。fromを使用するため、呼び出す必要のある特定のctimeメソッドを指定します。使用する場合は直接メソッド名を書くctime()呼び出すことができます、

2番目のメソッドでは、時間モジュール全体が直接導入されます。これを使用する場合は、モジュール名を追加してから、次のメソッドでtime.ctime()を参照する必要があります。

カスタムモジュール呼び出し

コーディングや設計を行うとき、いくつかのモジュールをカスタマイズする必要があることがよくあります。他のプログラムはこれらのモジュールを呼び出すことができます。その場合、メソッドと原理は上記のシステムモジュールの呼び出しと同様です。

最初にディレクトリModPythonを作成し、以下にパブリックモジュールPublicA.pyを定義します。理解を深めるために、私は簡単なメソッドを作成するための栗です。

#PublicA.py
def PubA():
print "I'm PublicA in /ModPythonh/PublicA.py"
次に、このディレクトリに新しいPythonプログラムA.pyを作成して、このカスタムモジュールを呼び出します。

#A.py
import PublicA
PublicA.PubA()
A.pyを実行した結果は次のとおりです。

/ModPythonh/PublicA.pyのdefPubA_1です
[ 1.1sで終了]
その結果、PublicA.pyのPubA()メソッドが正常に出力され、呼び出しが成功したことを示しています〜

2つのスクリプトPublicAとAは両方ともModPythonにあるため、ここでディレクトリ構造を見てみましょう。インポートを使用して直接引用します。

ModPython /

------------- / PublicA.py

------------- / A.py

このとき、ModPythonプロジェクトに新しいフォルダBを作成し、新しいファイルb1.pyとb2.pyを作成すると、ディレクトリと具体的な内容は次のようになります。

ModPython /

------------- / PublicA.py

------------- / A.py

------------- / B

------------- / B /b1.py

------------- / B /b2.py

#b1.py
def b1_1():
「私は/ModPythonh/B/b1.pyのdefb1_1です」と出力します。

def b1_2():
print“ I am def b1_2 in
/ModPythonh/B/b1.py”#b2.py
def b2_1():
print“ I am def b2_1 in /ModPythonh/B/b2.py”

def b2_2():
print "I am def b2_2 in /ModPythonh/B/b2.py"
このとき、b1をA.pyにインポートし、次にb1.b1_1()をインポートして、成功するかどうかを確認します。

この時点でエラーが報告されました:ImportError:b1という名前のモジュールがありません。b1という名前のモジュールがないと言われました。なぜですか?b1と実行可能プログラムA.pyが同じディレクトリにないため、見つかりません。今回の解決方法は?(黒板をノックする(o ゚ v ゚)ノ)要点をご覧ください...

Pythonクロスディレクトリモジュール呼び出し

上記で作成したディレクトリを引き続き使用し、次のルールに従ってより複雑なディレクトリをクリックし続けます。完了後、さまざまな状況でのクロスディレクトリモジュール呼び出しについて順番に説明します... ModPython /

------------- / A.py
------------- / PublicA.py
------------- / B / b1.py
------------- / B /b2.py
------------- / C /c.py

ModPythonでフォルダCを作成し、その中に新しいc.pyファイルを作成します。ファイルが作成されたら、個別に説明します。

同じレベルのディレクトリでのサブファイル呼び出し

このファイル構造では、A.pyと同じレベルにPublicA.pyディレクトリとBおよびCディレクトリがあるため、A.pyの場合、b1、b2、およびcはサブファイルです。

A.pyでb1を呼び出したい場合、何をする必要がありますか?

b1を直接インポートすると、インタビュー後にエラーが報告され、b1とAが同じディレクトリにないため、モジュールb1が見つかりません。

次に、b1の親ディレクトリB、BとA.pyが同じディレクトリにあり、Bがモジュールであり、b1とb2がモジュールのメソッドとして呼び出され、Bがモジュールであることをシステムに通知します。 Bの下に__init__。pyという名前の新しいファイルを作成する必要があります。コンテンツは空にすることができます。このファイルは、PythonBが呼び出し可能なモジュールであることを示しています。

------------- / B / init .py

ビルド後、A.pyで呼び出して実行します。

Bからインポートb1、b2
b1.b1_1()
b2.b2_2()
演算結果:

私は/ModPythonh/B/b1.pyのdefb1_1です

私は/ModPythonh/B/b2.pyのdefb2_2なので、
問題はありません。他の2つの書き込み方法も可能であることを追加しましょう。

#A.py
from B.b1 import *
b1_1()
#A.py
import B.b1
B.b1.b1_1()
上記の3つの方法は、__ init__。pyファイルが空であることに基づいています。個人的には、最初の方法を好みます。しかし、問題は、Bの下に多数のファイルがある場合、呼び出すたびに異なるメソッドが必要になる可能性があることです。呼び出すたびに直接書き込むことができますか。

Bからのインポート*

b1.b1_1()
b2.b2_2()
実行して、機能するかどうかを確認できます。今回は、次のプロンプトが表示されます。NameError:名前b1 」が定義されていません。実行するたびにBを直接下に導入する場合は、 callすべてのモジュールについて、__init__。pyファイルに追加してインポートする必要があります。

initのの.py
輸入B1、B2
ので、あなたが直接*インポートを書くことができるという。

同じレベルのディレクトリ間のクロスモジュール呼び出し

ModPython
--------- / A.py
--------- / PublicA.py
--------- / B / init .py
-------- -/ B /b1.py
--------- / B /b2.py

--------- / C /c.py

このディレクトリ構造をもう一度見て、整理してみましょう。BとCの場合、それらは同じレベルにあり、b1とcも同じレベルにあります。cでbを呼び出す必要がある場合は、どうすればよいですか。以前にA.pyによって呼び出された場合でも、次のよく知られたエラーが発生します。ImportError:Bという名前のモジュールがなく、インポートされたモジュールはBであり、必要に応じて、Bファイルとc.pyファイルが同じディレクトリにありません。上位ディレクトリCに戻り、Bから開始しますimport b1

ディレクトリにジャンプするには、pythonsysモジュールを呼び出して実装する必要があります。具体的な実装方法は次のとおりです。

#c.py
import sys
sys.path.append( '…')
from B import b1

b1.b1_1()
はappend()メソッドを使用して追加します。...は上位レベルのディレクトリに戻ることを意味します。

栗をもう一度見てみましょう。c.pyが上位レベルに戻ると、それはCディレクトリです。Cの場合、Bと同じレベルです。__init__。pyファイルは、すでにモジュールであるBの下に作成されています。インポートに使用できるこの時点で、Bからインポートb1を問題なくスムーズに呼び出すことができます。

これを知っていると、Pythonディレクトリ間でカスタムモジュールを呼び出す問題は基本的に解決されました。実際には機能しません。用途の広い方法があります(smile(/▽0080)):

呼び出されたファイルが属するフォルダーに__init__。pyファイルを作成し、sysモジュールをインポートして、appendを追加するときに呼び出されるファイルの絶対パスを直接書き込みます。

たとえば、上記のように、Bでファイルを呼び出す場合は、Bの絶対パスを見つけるだけで済みます。C:\ Users \ ModPython \ Bの場合、appendは次のように記述されます。

sys.path.append( 'C:\ Users \ ModPython')
だから、どんな状況でも見つけることができます~~~~

.pycファイルについて少し理解する

前述のさまざまな操作定義モジュールが呼び出されたので、新しいディレクトリの前にもう一度振り返ると、上記のb1.pyc、init .pycなど、さらにいくつかの.pycファイルを見つけるのは難しくないと思います。なぜこれらのpycファイルなのですか。生成され、pycファイルの役割は何ですか?私はいくつかの情報を確認し、ここで私の理解について話しました。

まず、Pythonの操作とコンパイルメカニズムの手順を見てみましょう。

Pythonの操作は当然、Pythonのソースコードをバイトコードに変換し、変換されたバイトコードを実行するインタープリターに依存します。

したがって、いくつかのモジュールを導入して呼び出すときは...

モジュールのロードプロセス中に、ソースコードは仮想マシン(インタープリター)によってPyCodeObjectオブジェクト(つまりバイトコード)に変換されます
。PyCodeObjectはCPUに書き込まれ、次の実行ではメモリから直接命令を読み取って実行します。プログラム
終了後、実行方法に応じて、実行結果をハードディスクに書き戻すか、.pycファイルにコピーするかを決定します。
再度実行する場合は、まず.pycファイルがあるか確認してください、その場合は、バイトコードファイルとそれ自体を確認します。変更時刻が同じ場合は、変更時刻が同じ場合は.pycファイルを直接実行し、一貫性がないかバイトコードがない場合は、前の3つの手順を再実行します。ファイル。
したがって、前に呼び出したすべてのモジュールは.pycファイルを生成します。

上記の手順を分析すると、.pycファイルは.pyファイルに対して相対的であることがわかります。実行されてメモリ空間に書き込まれるため、読み込み速度は.pyファイルよりも速くなります。これにより、プログラムの実行を高速化できます。

もちろん、.pycと.pyの実行は同じであるため、.pyはソースコードの形式で直接表示され、.pycは単なるバイトコードファイルです。ある程度、コードの実行を妨げる可能性もあります。覗く...特定の隠された効果があります。
----------------
著作権声明:この記事はCSDNブロガーのオリジナル記事です。CC以下、「マイ豚は非常に強力です」 4.0 BY-SA著作権契約、再印刷のために元のソースリンクとこのステートメントを添付してください。
元のリンク:https://blog.csdn.net/qq_32897143/article/details/79960432

おすすめ

転載: blog.csdn.net/Love_Polaris/article/details/106682534