该项目在Python3中:
Project
|
Mymodule
__init__.py
|
submodule1
__init__.py
some_script.py
|
submodule2
__init__.py
myclass.py -> implements MyCLass
每当我运行脚本时,我都从Project目录开始。我总是从这个项目位置执行
在Mymodule.submodule1.some_script.py
中,我想导入位于MyClass
some_script.py
内的submodule2
some_script.py
from ..submodule2.myclass import MyClass
from Mymodule.submodule2.myclass import MyClass
我想要实现的是避免在我的子模块中的脚本文件中基于位置的相对引用。我什么时候尝试导入模块它应该在当前目录中搜索,如果没有找到,则转到sys.path
。
所以我的解决方案位于my __init__.py
submodule1
import os
import sys
sys.path.append(os.path.abspath('./Mymodule')) -> cwd will be "Project"
如果我导入
,现在在some_script.py
内
from submodule2.myclass import MyClass
这应该有效,因为我有一个到根/父模块(Mymodule)的sys.path条目。我已通过some_script.py
这总是会引发错误:
ImportError: No module named 'submodule2.myclass
为什么不考虑sys.path
来搜索模块。
答案 0 :(得分:0)
我能够找出问题所在。在我的sys.path中,已经有一个类似命名的模块(子模块2)在我当前项目路径之前的不同路径中。所以python在搜索模块时遇到的第一个模块中搜索文件,该模块位于不同的位置
打印(sys.path中)
\ somepath:...:....:...:\ myproject_path
\ somepath - >具有类似名称的模块(子模块2)
\ myproject_path - >我的模块具有类似名称submodule2