Python 从子目录和在子目录内导入时,如何解决冲突的导入要求?
我有一个具有以下结构的项目:Python 从子目录和在子目录内导入时,如何解决冲突的导入要求?,python,spyder,Python,Spyder,我有一个具有以下结构的项目: ./script.py ./modules/__init__.py ./modules/mod1.py ./modules/mod2.py 我需要在mod1.py中导入mod2,在script.py中导入mod1和mod2。为了便于测试,我有时还希望将mod1.py文件作为脚本运行(使用if\uuuuuu name\uuuuuu==“\uuuuuu main”:)。然而,我注意到以下几点: 在script.py中,我包括来自modules import mod1
./script.py
./modules/__init__.py
./modules/mod1.py
./modules/mod2.py
我需要在mod1.py
中导入mod2
,在script.py
中导入mod1
和mod2
。为了便于测试,我有时还希望将mod1.py
文件作为脚本运行(使用if\uuuuuu name\uuuuuu==“\uuuuuu main”:
)。然而,我注意到以下几点:
- 在
中,我包括来自modules import mod1的script.py
和来自modules import mod2的
- 如果我在
中包含mod1.py
,我可以运行import mod2
mod1.py
- …但是如果我尝试运行
,我会得到script.py
。我可以修改ModuleNotFoundError:没有名为'mod2'的模块
,改为使用模块导入mod2的mod1.py
,然后运行
script.py
- 。。。但是如果我尝试只运行
,我会得到mod1.py
ModuleNotFoundError:没有名为“modules”的模块
from modules import mod1
from modules import mod2
并使用以下命令从根目录运行所有内容:
@Piotr Praszmo的答案有效。根据这个答案,我发现对于在Spyder中运行脚本的特定情况,在任何地方使用绝对导入,然后将
runfile
命令中的工作目录更改为根目录,解决了我的问题:
runfile('./modules/mod1.py', wdir='./')
当我尝试使用您建议的代码运行
mod1.py
时,我没有问题…@user32882我正在通过Spyder运行我的所有脚本-这可能会有所不同。澄清一下,这意味着模块可以/不应该作为来自其子目录的脚本运行?是的,这仅适用于根目录中的模块(即:pythonscript.py
)。包中的子模块不应以这种方式执行。
runfile('./modules/mod1.py', wdir='./')