2018年06月15日

Pythonで自作ライブラリのパスを設定する

エモトです.みなさまDP2はご覧になりましたでしょうか.こまけぇことはいいんだよのAAがよく似合うエピローグ(いや全編でか),これが映画なんだよと圧巻でした.

※文末に追記あり

Pythonに限らず,作成したメソッドやライブラリを他の自プロジェクトに使いたいことはあると思います.今回はそんなときのお話です.

ライブラリを公開して,pip コマンドでインストール可能にすれば便利ですが,一般公開するまでもないものや,公開してはダメなものもあるので,今回はローカル環境でパスを設定します.

PYTHONPATH を設定すればできるようですが,私の環境は pyenv で作成しているのか,うまく反映されませんでした.
$ export PYTHONPATH="hogehoge/mylib"
そこで,すでにパスが通っているところに pthファイル を置いて,新たにパスを設定します.それらのパスは以下のようにして確認できます.
import sys
for path in sys.path:
  print(path)
pthファイルは site-packages に保存します.私の環境では以下のパスになりました.
/Users/user/.pyenv/versions/3.6.1/lib/python3.6/site-packages
次に,pth ファイル名を mylib.pth,設定したいパスを hogehoge/mylib としたとき,以下のようにすれば pth ファイルを追加できます.
pth_file = "mylib.pth"
pth_body = "hogehoge/mylib"
for path in sys.path:
  if ".pyenv" in path and path.endswith("site-packages") is True:
    save_path = os.path.join(path, pth_file)
    with open(save_path, "w") as f:
      f.write(pth_body)
また,ファイル追加をしたら,削除も用意した方もいいでしょう.ここは簡単にコマンドラインの引数から,削除を追加しました.
# $ python add_pth_file.py delete
if len(args) > 1 and args[1] == "delete":
  if os.path.exists(save_path):
    os.remove(save_path)
いまのところ,他プロジェクトでも使うライブラリは,このpthファイル作成と一緒に1つのリポジトリに入れて管理しています.新しい環境でも,gitクローンしたらパス追加コマンドを使えば,簡単にライブラリが使えるようになります.また,パス指定のところでディレクトリ位置を動的に取得して反映するように変更し,クローンを行うディレクトリに依存しないようにしています.

(追記)最近,PyPIに自作パッケージを登録したことで気づいてしまいました(今さらやっと).このパスを設定せずとも,プライベートのライブラリをPyPI登録直前まで用意して,ローカルでpip installした方がインストールと管理が簡単ですね.プライベートのライブラリをプライベートのgit環境でメンテしておけばアップデートも管理しやすい.


posted by Seesaa京都スタッフ at 12:00| Comment(0) | 機械学習 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

×

この広告は180日以上新しい記事の投稿がないブログに表示されております。