Pythonパッケージの自作とインストール手順

はじめに

この記事ではパッケージを自作し、それをインストールする手順について学びます。

モジュール・パッケージとは

公式ドキュメントから引用します。

モジュールは Python の定義や文が入ったファイルです。ファイル名はモジュール名に接尾語 .py がついたものになります。

パッケージ (package) は、Python のモジュール名前空間を “ドット付きモジュール名” を使って構造化する手段です。例えば、モジュール名 A.B は、 A というパッケージのサブモジュール B を表します。

つまり、モジュールは単一のPythonファイルであり、それをまとめたものがパッケージとなります。

まずは、パッケージを自作していきましょう。

パッケージの作成

今回のワークスペースディレクトリを作成します。

ここではsandboxと命名しましょう。

sandbox以下にパッケージを作成していきます。

先述の通り、パッケージはモジュールをまとめたものですので、ディレクトリとなります。

sandbox以下にパッケージ名のディレクトリを作成します。

ここではmy_packageと命名しましょう。

1
2
sandbox/
└── my_package

続いてmy_package以下に__init__.pyを作成します。

今回は最低限の構成とするため、空のテキストファイルとして作成します。

1
2
3
sandbox/
└── my_package
   └── __init__.py

続いて、モジュールを作成します。

ここではmy_module.pyと命名しましょう。

my_module.pyの内容

1
2
def my_function():
print ("called my_function")
1
2
3
4
sandbox/
└── my_package
  ├── __init__.py
  └── my_module.py

最後に作成したモジュールを呼び出すスクリプトを作成します。

ここではscript.pyと命名しましょう。

script.pyの内容

1
2
from my_package.my_module import my_function
my_function()
1
2
3
4
5
sandbox/
├── my_package
│   ├── __init__.py
│   └── my_module.py
└── script.py

さてスクリプトを実行してみましょう。

1
python3 script.py
1
called my_function

うまく行きました!

スクリプトを作成しなくても、下記のコマンドで確かめることもできます。

1
python3 -c 'from my_package.my_module import my_function'

pipでのインストール

さて、次にpipでのインストールに挑戦してみましょう。

なぜインストールするか

その前に、sandbox以外のディレクトリに移動し先ほどのコマンドを実行してみましょう。

1
python3 -c 'from my_package.my_module import my_function'

下記のようなエラーとなってしまうはずです。

1
2
3
Traceback (most recent call last):
File "<string>", line 1, in <module>
ModuleNotFoundError: No module named 'my_package'

パスが通っていないため、my_packageのインポートに失敗しているのです。

そこで、どこからでもインポートできるようにpipでのインストールを考えたくなるのです。

仮想環境の設定

pipコマンドでインストールをしてしまうので、今の環境を壊さないために仮想環境を用いましょう。

どのような方法でも良いですがここではvenvを使います。

sandboxディレクトリに移動し

1
python3 -m venv venv

としてください。venvディレクトリが作成されます。

以下のコマンドで仮想環境のアクティベイトができ

1
. /venv/bin/activate

以下のコマンドで仮想環境のディアクティベイトができます。

1
deactivate

手順

sandbox以下にsetup.pyを作成します。

そして以下のように記述します。

1
2
3
4
5
from setuptools import setup, find_packages
setup(
name='my_package',
packages=find_packages(),
)
1
2
3
4
5
6
sandbox/
├── my_package
│   ├── __init__.py
│   └── my_module.py
├── script.py
└── setup.py

これで準備は完了です。

忘れずに仮想環境をactivateした後、sandbox以下で

1
pip install -e .

とすればパッケージのインストールができます。

今度はディレクトリを変えても

1
python3 -c 'from my_package.my_module import my_function'

が正常に動作します。

記事情報

  • 投稿日:2020年4月11日
  • 最終更新日:2020年4月11日