无法导入python模块

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

我的项目结构是这样的:

--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:我想在类似的way中导入该类。

python import module package
1个回答
0
投票

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

from mod2 import classA

上述解决方案也适用于run_test_1.pyrun_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,它还讨论了如何加载子模块。

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