pythonで自前のモジュールのimport


きっかけ

つい先日しばくんと飲んだとき、

「pythonの自前のモジュールの管理、どうしてます?」

などと聞かれ

「うーん、from . import xxx とか結局面倒なので、 作業ディレクトリに各種 .py のシンボリックリンク置いといて、 import xxx にしてしまってるなぁ...」

などと申しておりました。

が、後々考えてみると、これでは作業場所がとっちらかって、すっきりしません。

せめて

$ cat foo.py
import thr
  :

$ find .
./foo.py
./kon_ut/thr.py
./kon_ut/empty.py
  :

などと、自前モジュールのディレクトリにまとめておきたいところ...


.pthファイル!

改めて調べてみると、それに適するちゃんとした方法がありました。

https://docs.python.org/ja/3/library/site.html

$ python -m site --user-site
/Users/kondoh/Library/Python/3.6/lib/python/site-packages

ここに表示されてる場所(なければ作る)に、 自前モジュールへのパスを列挙したファイルを、 拡張子.pthのファイル名で置けば良いと。

root権限も不要で、 環境変数PYTHONPATHなどの変更も不要ですね。

例えば

/Users/kondoh/
  kon_ut/
    empty.py
    thr.py
  ezmd/
    ezmd.py

な配置だとして、

ezmd.py から import empty で empty.py を参照してるとします。

$ USITE=$(python -m site --user-site)
$ mkdir -p $USITE
$ echo /User/kondoh/kon_ut > $USITE/kon_page.pth
$ echo /User/kondoh/ezmd >> $USITE/kon_page.pth

これで、どこからでも

$ python
>>> import empty
>>> import ezmd
>>>

可能です。

ezmd.pyの実行も

$ cd /tmp
$ python -m ezmd < index.txt
  :

などとして実行可能です。

めでたし。