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,
},
}
]
}
まとめ(感想文)
もうちょっとやり方がありそうなんだけども、私の今の環境ではこんな感じ。
