我的项目结构是这样的:
--base
__init__.py
mod1.py
mod2.py
version.py
__init__.py
的内容:
from .version import __version__ as version
__version__ = version
mod2包含一个名为classA的类。
在mod1里面我像这样导入classA:
mod1.py:
from base.mod2 import classA
但是我收到一条错误,上面写着“没有名为base的模块”。
注意:import mod2
有效。但是,我想使用绝对路径方法,但它不起作用。谁能告诉我我做错了什么?
编辑:我正在从base
目录执行python脚本。此外,base
在sys.path
(刚刚验证)。
编辑2:我想在类似的way中导入该类。
更新3:如果要从包目录(即base
)中导入子模块,可以在文件/模块base
中使用它(省略导入中的mod1.py
部分),
from mod2 import classA
上述解决方案也适用于run_test_1.py
和run_test_2.py
脚本。希望这有助于=)
更新2:我将通过从test
目录执行python脚本来演示相同的方法,
在run_test_1.py
目录下创建一个名为test
的脚本,其结构与“UPDATE 1”相同,其内容如下:
from base.mod2 import classA
a = classA()
还要在run_test_2.py
目录下创建第二个名为test
的脚本,其中包含以下内容:
from base import mod1
mod1.classA()
像这样评估终端中的两个脚本,
$ cd ~/path/to/test/
$ python run_test_1.py
hello
$ python run_test_2.py
hello
如图所示,您应该在终端上获得“hello”的输出。
更新1:我在一个名为test
的目录下为你的包创建了相同的目录结构,
-- test
--base
__init__.py
mod1.py
mod2.py
version.py
__init__.py
的内容与您的相同。
from .version import __version__ as version
__version__ = version
mod1.py
的内容与你的相同,
from base.mod2 import classA
mod2.py
的内容:
class classA:
def __init__(self):
print("hello")
然后使用目录python
中的test
解释器,我测试了以下内容,
>>> from base.mod2 import classA
>>> a = classA()
hello
如果您确定base
目录位于sys.path
,那么您可以试试这个,
from base import mod2
此外,我建议您将base
更改为您的项目更具信息性的内容。
编辑:我还建议你检查Python网站上的"Packages" documentation,它还讨论了如何加载子模块。