【问题标题】:Unable to import python modules无法导入 python 模块
【发布时间】:2019-03-07 04:04:21
【问题描述】:

我的项目结构是这样的:

--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 中(刚刚验证)。

EDIT 2:我想以类似的way 导入类。

【问题讨论】:

  • 看看this
  • 这很有帮助。但我不想使用文件的完整路径。我想尝试实现类似this

标签: python import module package


【解决方案1】:

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

from mod2 import classA

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

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

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

from base.mod2 import classA
a = classA()

同时在test目录下创建第二个脚本run_test_2.py,内容如下:

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")

然后使用目录test 中的python 解释器,我测试了以下内容,

>>> from base.mod2 import classA
>>> a = classA()
hello

如果您确定base 目录在sys.path 中,那么您可以试试这个,

from base import mod2

另外,我建议您将 base 更改为对您的项目提供更多信息的内容。

编辑:我还建议您查看 Python 网站上的 "Packages" documentation,其中还讨论了如何加载子模块。

【讨论】:

  • from base import .mod2 在 Python 3 中
  • 感谢您的回答。看来你问错了。我已经编辑了问题以使其更清楚。
  • @James 您是否尝试从base 的父目录中的ipython 调用它,或者甚至从其他目录调用它,因为它已经在路径中?
  • 我没有使用iPython,但我从base目录调用它。
  • 好的,没问题,您是否尝试过从其他目录调用,请仔细检查base 目录是否在sys.path 中。
猜你喜欢
  • 2013-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-08
  • 2017-11-02
  • 2018-09-17
  • 2017-12-11
相关资源
最近更新 更多