Pythonで上の階層のpyファイルをimport
したい!
概要
今回の記事では、Pythonで上の階層のpyファイルをimport
する手順を掲載する。
仕様書
環境
- Windows_NT x64 10.0.22621
- VSCODE 1.85.2
- Python 3.11.5
手順書
下記のようなファイルの構成になってるとしてtest.py
からutils.py
をimportするサンプル。
workspace/
utils.py
scripts/
test.py
utils.py
にあるtest_print
を呼び出すとして
def test_print(str):
print(str)
test.py
はこんな感じ。
import sys
import os
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
import utils
utils.test_print("test!")
os.path.abspath(__file__))
でtest.py
のフルパスを取得して、os.path.dirname
でファイル名を消して、更にos.path.dirname
で一番下のディレクトリを消して、sys.path.append
でimport
の起点になるディレクトリとしてtest.py
の親のディレクトリ(この場合はworkspace
)のパスを追加してる。
コードを使わずなんとかしたい!
毎回、このコードを挿入するのは面倒なのでコードを使わずなんとかしたい!
環境変数PYTHONPATH
にimport
の起点になるディレクトリを設定しておくとコード側での対応は不要になる。
ワークスペースのルートを登録しておくとワークスペース内のどのファイルからでも共通のパスでimport
出来るようになるので楽ちんだ!
VSCODEのtask.json
にbuild
を実行時、環境変数PYTHONPATH
にワークスペースのルートを登録する例。
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "run",
"type": "shell",
"command": "pipenv",
"options": {
"env": {
"PYTHONPATH": "${workspaceRoot}/;${env:PYTHONPATH}"
}
}
"args": [
"run",
"python",
"${file}",
],
"group": {
"kind": "build",
"isDefault": true,
},
}
]
}
まとめ(感想文)
もうちょっとやり方がありそうなんだけども、私の今の環境ではこんな感じ。