Select Language

AI Technology Community

4.2、Pythonパッケージの使用

パッケージはソースファイルではなく、ディレクトリに対応しています。パッケージディレクトリの下には必ず __init__.py という名前のファイルが存在しなければなりません。例えば、以下のようなディレクトリ構造を作成することができます:

$ tree pkgDemo1/
pkgDemo1/
└── __init__.py

ここで、pkgDemo1 ディレクトリはパッケージです。

>>> import pkgDemo1
>>> pkgDemo1
<module 'pkgDemo1' from '/pkgDemo1/__init__.py'>

__init__.py は現在、モジュールとなっており、前述の方法を使用してそこで定義された内容を利用することができます。例えば、__init__.py の内容を変更して、以下の内容を含めることができます:

""" this is the pakage demo file
"""
name =  "pkgDemo1"
author = "love.pythoh"

これで、これらの新しく追加された内容にアクセスすることができます:

>>> import pkgDemo1
>>> pkgDemo1.name
'pkgDemo1'
>>> pkgDemo1.author
'love.pythoh'
>>> pkgDemo1.__doc__
' this is the pakage demo file\n'


一般的に、パッケージは複数のモジュールを含みます。例えば、同じディレクトリに mod1.py と mod2.py の2つのファイルを配置すると、その構造は以下のようになります:

$ tree pkgDemo1/
pkgDemo1/
├── __init__.py
├── mod1.py
└── mod2.py

mod1.py の内容は以下の通りです:

""" this is mod1.py
"""
name =  "pkgDemo1.mod1"
def hello():
    print("hello from pkgDemo1.mod1")

mod2.py の内容は以下の通りです:

""" this is mod2.py
"""
name =  "pkgDemo1.mod2"
def hello():
def hello():
    print("hello from pkgDemo1.mod2")

次に、このパッケージの内容を使用します。コードは以下の通りです:

>>> import pkgDemo1.mod1        # mod1 をインポートする際、先頭のパッケージ名に注意
>>> import pkgDemo1.mod2        # mod2 をインポートする際、先頭のパッケージ名に注意
>>> pkgDemo1.mod1
<module 'pkgDemo1.mod1' from 'pkgDemo1/mod1.py'>
>>> pkgDemo1.mod2
<module 'pkgDemo1.mod2' from '/pkgDemo1/mod2.py'>
>>> pkgDemo1.mod1.hello()       # パッケージ名とモジュール名を付ける
hello from pkgDemo1.mod1
>>> pkgDemo1.mod2.hello()
hello from pkgDemo1.mod2


post
  • 10

    item of content
Pythonにおいて、ディレクトリとファイルは非常に重要で、異なるファイルでは同じ関数や変数を定義しても衝突が起こりません。これはJavaに似ており、CやC++とは明らかに異なります。Pythonはソースコードのレベルでネームスペースを定義していないため、ファイルとパスがimport文と共にネームスペースの役割を果たします。
異なるPythonファイルは異なるモジュールに対応し、同じディレクトリ内の複数のPythonファイルの集合が1つのパッケージとなります。
この章では、読者にPythonのモジュールとパッケージの概念と定義を説明し、合わせてサードパーティのPythonパッケージの様々なインストール方法と使用法を紹介します。