C#の.csファイル、.java、またはJavaのコンパイル済み.classファイルなど、コンパイルされた言語の場合、モジュールと見なすことができます(ただし、モジュールとして表現されないことがよくあります)。解釈された言語の方が直感的です。 Pythonの.pyファイルであるPHPの.phpファイルなど、一部はモジュールと見なすことができます。主にモジュールの編成と管理の便宜のために、「モジュール」の上に「パッケージ」があります。たとえば、C#でコンパイルされた.dllファイル(ただし、パッケージとして表現されないことが多いが、ライブラリライブラリ)、. classの後の.jarファイルはJavaでパッケージ化され、PHPの.pharファイル(Javaパッケージを模倣)、Pythonで1つ特別に定義されたフォルダはパッケージであり、eggファイルとしてパッケージ化できます。ただし、解釈される言語「パッケージ」は、低レベルの言語にコンパイルされてからパッケージ化されることを意味するものではありませんが、モジュール間の依存関係をモジュール化して管理する方が便利です。すべてのプログラミング言語には、モジュールとパッケージの管理に関する特定の規則があります。これらの規則を理解していないと、この言語の学習に障害が発生します。ここで、これらのPythonの規則を整理したいと思います。
1つは、Pythonがモジュールのパスを見つけることです
Pythonアプリケーションを実行したり、Pythonモジュールを参照したりするには、Pythonインタープリターに検索プロセスが必要です。環境変数PYTHONPATHを設定して、関連するPythonモジュールの検索を容易にすることでPythonの検索パスを追加できます(異なるオペレーティングシステムの環境変数の設定はわずかに異なり、デフォルトは以下のWindows環境です)。これは多くのアプリケーションとは異なります。システム環境変数の原理は同じです。コマンドラインの次のコマンドで設定できます。
C:\Users\Administrator set PYTHONPATH=E:/Project/Python/ModuleAndPackage/
Python環境に入った後、Pythonのsys.path属性を介して現在の検索パスの構成を取得でき、前に設定したパスがすでに現在の検索パスにあることがわかります。
C:\Users\Administrator python
Python 2.7.11(v2.7.11:6d1b6a68f775, Dec 52015,20:32:19)[MSC v.150032bit(Intel)] on win32
Type "help","copyright","credits" or "license"for more information.import sys
sys.path
['',' E:\Project\Python\ModuleAndPackage','C:\Windows\system32\python27.zip','C:\Python\DLLs','C:\Python\
lib','C:\Python\lib\plat-win','C:\Python\lib\lib-tk','C:\Python','C:\Python\lib\site-packages']
sysモジュールのappendメソッドを使用して、Python環境で検索パスを増やすこともできます。
sys.path.append("E:\Project\Python\ModuleAndPackage2")
sys.path
['',' E:\Project\Python\ModuleAndPackage','C:\Windows\system32\python27.zip','C:\Python\DLLs','C:\Python\
lib','C:\Python\lib\plat-win','C:\Python\lib\lib-tk','C:\Python','C:\Python\lib\site-packages','E:\
Project\Python\ModuleAndPackage2']
2つ、Pythonのモジュールとパッケージ
前述のように、各.pyファイルはPythonモジュールと見なすことができます。.pyファイルには、クラス、メソッド、変数、および定数を含めることができます(Pythonには厳密な意味での定数はありませんが、大文字の変数が定数として使用されることに同意するだけです)。他の解釈された言語と同様に、すべての論理ステートメントをファイルに直接記述し、ロード時に上から下に直接実行することもできます。たとえば、ModuleAndPackageフォルダーにテキストファイルperson.pyを作成して、次の内容の単純なPythonモジュールを作成することを選択します。
# - *- coding: utf-8-*-
ID =1
name ="This person"
print name
def say(something):
print name,'says', something
次に、Python環境でperson.pyを実行できます。 cmdコマンドラインに入力することにより、person.pyをバッチファイルのように直接実行できます。
Python E:/Project/Python/ModuleAndPackage/person.py
基本的に、Pythonアプリケーションのエントリモジュールはこの方法で実行されますが(C#やJavaのメイン関数のように)、モジュールを参照するには、モジュールを実行するためのコンテキストを確立する必要があります。最初に環境変数PYTHONPATHを設定して、Pythonインタープリターがperson.pyモジュールを見つけられるようにし、次にpersonモジュールをインポートしてメソッドまたは変数にアクセスします。
C:\Users\Administrator python
Python 2.7.11(v2.7.11:6d1b6a68f775, Dec 52015,20:32:19)[MSC v.150032bit(
Intel)] on win32
Type "help","copyright","credits" or "license"for more information.import person
This person
person.say("hello")
This person says hello
print person.name
This person
Pythonは、Pythonモジュールを見つけるために特定の固定パスに移動する必要があります。上記では、ModuleAndPackageで検索するように設定しています。しかし、これらのパスにはディレクトリ階層もあります。Pythonはどのようにしてサブディレクトリ内のモジュールを見つけますか?特にサードパーティのパッケージを参照する場合は、ある程度の関係も知る必要があります。実際、Pythonはディレクトリとファイルを介してパッケージ構造を構築し、パッケージはレイヤーごとにネストされます。これは、ディレクトリのレイヤーごとのネストと同じです。これは、パッケージ内のアクセスパス(または名前名、またはPythonアプリケーション)を構成します。名前名はそのディレクトリとファイル構造に対応しており、柔軟性に欠けているようですが、より単純です)。たとえば、ModuleAndPackageフォルダーの下にanimalフォルダーを作成し、その中に次の内容のテキストファイルpet.pyを作成します。
# - *- coding: utf-8-*-
ID =2
name ="This pet"
print name
def run(somewhere):
print name,'runs', somewhere
では、pet.pyモジュールを参照する方法は? Pythonの規則に従って、動物フォルダーがパッケージであることを識別するために、init。pyという名前の空のテキストファイルを動物フォルダーに作成する必要があります。動物フォルダにパッケージとしてフォルダがある場合は、init。pyファイルも含める必要があります。このようにして、アクセスパスはレイヤーごとに識別されます。
import animal.pet
This pet
print animal.pet.name
This pet
animal.pet.run("everywhere")
This pet runs everywhere
または、fromキーワードを使用して、モジュール内の属性またはメソッドを直接インポートします。
from animal.pet import name,run
print name
This pet
run("everywhere")
This pet runs everywhere
ナレッジポイントの拡張:
**モジュールを使用する利点は何ですか? ****
モジュールを作成すると、他の場所で参照できます。プログラムを作成するときは、組み込みのPythonモジュールやサードパーティのモジュールなど、他のモジュールを参照することがよくあります。
モジュールは、関数名と変数名の間の競合を回避することもできます。同じ名前の関数と変数は、異なるモジュールに格納できます。ただし、組み込みの関数名と競合しないように注意してください。
異なる人が書いたモジュール名が同じ場合はどうなりますか?モジュール名の競合を回避するために、Pythonは、パッケージと呼ばれる、ディレクトリごとにモジュールを編成する方法を導入しました。
これまでのところ、pythonモジュールの表示方法に関するこの記事が紹介されています。より関連性の高いpythonモジュールについては、ZaLou.Cnで以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後、ZaLou.Cnをさらにサポートしていただければ幸いです。
Recommended Posts