如何在Python中导入模块而不改变代码中的相对路径?

问题描述 投票:0回答:1

我正在尝试导入一些已有的模块,但当我将项目根目录插入系统路径时,代码中的相对路径出现错误。我的目录如下所示:

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
给了我同样的问题。

python python-import importerror python-module
1个回答
0
投票

进程的活动目录(读取:

os.getwd()
,更改:
os.chdir()
)与导入路径列表(
sys.path
)完全分开。

Python 脚本中的

os.listdir('../output')
的行为与 shell 脚本中的
ls ../output
完全相同:其结果取决于您运行脚本的位置。添加或删除
sys.path
的路径不会更改您的工作目录。


如果您知道此输出目录将始终位于相同的固定位置,请使用

output/
的绝对路径而不是相对路径,这样您就不会依赖于运行脚本的位置。

© www.soinside.com 2019 - 2024. All rights reserved.