我正在尝试导入一些已有的模块,但当我将项目根目录插入系统路径时,代码中的相对路径出现错误。我的目录如下所示:
project/
|
|----output/
|
|----package/
|--------__init__.py
|--------module.py
|
|----dir/
|--------script.py
仅尝试在
dir1
中使用 script.py
导入 from dir1 import module
,会输出错误 ModuleNotFoundError: No module named 'dir1'
。当我尝试以下方法时:
import sys
sys.path.insert(1, 'path/to/project')
from dir1 import module
a = os.listdir('../output/')
它给了我错误
FileNotFoundError: [Errno 2] No such file or directory: '../output'
。只有当我将代码中的路径更改为 'output/'
时它才有效。显然,当更改系统路径时,代码中的路径都是基于项目根目录的。如何导入我的模块而无需相应地更改代码中的路径?
尝试命令
export PYTHONPATH=path/to/project
给了我同样的问题。
进程的活动目录(读取:
os.getwd()
,更改:os.chdir()
)与导入路径列表(sys.path
)完全分开。
Python 脚本中的 os.listdir('../output')
的行为与 shell 脚本中的 ls ../output
完全相同:其结果取决于您运行脚本的位置。添加或删除 sys.path
的路径不会更改您的工作目录。
如果您知道此输出目录将始终位于相同的固定位置,请使用
output/
的绝对路径而不是相对路径,这样您就不会依赖于运行脚本的位置。