首页 > 解决方案 > 无法导入 python 模块

问题描述

我的项目结构是这样的:

--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 脚本。此外,basesys.path(刚刚验证)。

编辑 2: 我想以类似的方式导入类。

标签: pythonimportmodulepackage

解决方案


更新3:如果你想从包目录中导入一个子模块,你可以在文件/模块中base使用它(省略导入中的部分) ,basemod1.py

from mod2 import classA

上述解决方案也适用于run_test_1.pyrun_test_2.py脚本。希望这会有所帮助=)

更新 2test :我将通过从目录执行 python 脚本来演示相同的方法,

在与“UPDATE 1”结构相同的目录下创建一个名为的脚本,其内容run_test_1.py如下:test

from base.mod2 import classA
a = classA()

还要run_test_2.pytest目录下创建第二个脚本,其内容如下:

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 网站上的“包”文档,该文档还讨论了如何加载子模块。


推荐阅读