やりたいこと
自分のpyファイルをsys
などのモジュールのようにimportして使いたい。
次のような書き方を、
import sys
sys.path
例えば自分が作ったmypy.py
でもやりたい。
import mypy
mypy.func()
つまり、Pythonの中でパスを通したい。
2019年の今、色んなページにこの方法(全部または一部)が書かれていますが、ちょっとハマってしまったのでQiitaに書きます。
venv
で仮想環境を作るほどでもないときに使うのだと思います。
方法
PYTHONPATH
というPythonが使用する環境変数があります。
PYTHONPATH
の値に、自分のpyファイルが置いてあるフォルダのパスを入力すればOKです。
PYTHONPATH
の公式の説明が読みたい方は、こちらへ。
WindowsでPYTHONPATH
を新規作成する
例えば、自分のpyファイルmypy.py
がC:\script
にあるとします。
フォルダ構成は次のようなものだとします(sub_scriptフォルダはsub-scriptのように-を含むとエラーになりますので注意)。
C:
\script
\mypy.py
\mypy2.py
\sub_script
subpy.py
エクスプローラーを開いて、
左ナビゲーションバーのPCを右クリック > プロパティ > システムの詳細設定 > 環境変数 > 新規
にて環境変数PYTHONPATH
を入力し、値にフォルダのパスを入力します。
複数のフォルダを指定したい場合は、C:\script;C:\script2
のように;
つなぎです。
そして、もし、SpyderやAnaconda Promptを起動していたら、再起動してください(Windowsの再起動は不要です)。
パスが通せたか確認する
その後、
import sys
sys.path
を実行すれば、C:\\script
がパスに追加されていることが確認できます(\
は自動で\\
になります)。
In[11]: sys.path
Out[11]:
['C:\\Users\\maech',
'C:\\script', ... <-- 追加されている
自分のpyファイルをimportする
これで、C:\script\*.py
のすべてのpyファイルがimportできます。
# C:\script\mypy.pyをインポート
import mypy
# mypy.pyに定義したfunc()を使う
a = mypy.func()
# mypy.pyに定義したクラスmypyのfunc()を使う
a = mypy.mypy.func()
# この場合は from mypy import mypy とすると a = mypy.func() で呼び出せる
# C:\script\mypy2.pyをインポート
import mypy2
# C:\script\sub_script\subpy.pyをインポート
import sub_script.subpy
Linuxでやりたい人
bashを使っているのなら、~/.bashrc
を開き、次の文を追加してください。ここでは/home/user/add
内にimportしたいpyファイルがあるとします。複数パスがある場合は:
でつないでください。
export PYTHONPATH="/home/user/add:$PYTHONPATH"
その後、ターミナルとSpyderを再起動すれば反映されます。
ターミナルの起動時に.bashrc
を読み込むのでターミナルを新たに起動する必要があります。
参考
-
PYTHONPATH — 1. コマンドラインと環境 — Python 3.6.5 ドキュメント https://docs.python.jp/3/using/cmdline.html#envvar-PYTHONPATH
-
Pythonでimportの対象ディレクトリのパスを確認・追加(sys.pathなど) | note.nkmk.me https://note.nkmk.me/python-import-module-search-path/
-
python - Setting PYTHONPATH on Windows under Anaconda without elevated privileges - Stack Overflow https://stackoverflow.com/questions/43099096/setting-pythonpath-on-windows-under-anaconda-without-elevated-privileges