🐍
__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