🐍
__init__.py の書き方を永遠に覚えられない私へ
自作スクリプトをパッケージ化するときの書き方
業務で自作のPythonスクリプトをパッケージ化する必要に迫られたのですが、意外とハマったので備忘録を残しておきます。
Pythonバージョンは3.9.x
です。
例示
構成
+ hoge/
+- __init__.py
+- foo.py
$ cat hoge/__init__.py
from .foo import bar
$ cat hoge/foo.py
def bar(msg :str="Hello World!"):
print(msg)
return None
if __name__=="__main__":
bar()
exit()
基本的なポイント
- パッケージ宣言のようなものは不要
- ディレクトリを作り、
__init__.py
と一緒に クラスや関数を定義した.py
を放り込む- ディレクトリ名がそのままパッケージ名になる
-
__init__.py
で、使いたい関数やクラスをimport
しておく-
__init__.py
は空でもいいし最悪なくてもよいが、あったほうがよい -
import
では相対パスが使える - ファイル
foo.py
を読み込む場合、上記のように「カレントディレクトリにあるfoo」(.foo
)を明示的に指定する(でないと読み込めなくて落ちた) -
bar
はデフォルトで読み込みたい(読み込ませたい)関数やクラスを指定する
-
-
__init__.py
で読み込んでいない関数やクラスは、パッケージをただimport
しても使えない。(sklearn
を思い出そう)
Discussion