gpt4 book ai didi

Python从子模块导入子模块

转载 作者:行者123 更新时间:2023-12-02 20:59:56 25 4
gpt4 key购买 nike

我在使用 python 导入时遇到问题。我写了一个完成的模块,它本身使用了几个子模块(那些是导入的)。

例如

module:
main_class.py
submodule1.py
....

现在我想通过另一个 super 模块使用这个完成的模块,所以文件夹结构会像这样改变

supermodule:
main_class_super.py -- this class imports module.main_class
module:
main_class.py
submodule1.py
....

但是现在模块内 main_class.py 代码中使用的所有导入都失败了(我猜是因为导入现在在 main_class_super.py 的命名空间中工作)

知道如何在不重组整个源代码的情况下解决这个问题吗?


具体错误:

在我的 main_class.py 中,我使用以下行:

import submodule1

在我的 supermodule.py 中,我使用以下行:

import module.main_class

当执行导入 module.main_class 的父类(super class)时,当然 import submodule1 行也会被执行,但是失败了,因为它在supermodule.py.

最佳答案

如果你使用的是 python 2,你应该将 from __future__ import absolute_import 添加到你的文件中(在 3 上不需要),这样你就可以像 Guido states in PEP 328 这样的导入了

据此你应该

  • 确保您所有的包文件夹中都有一个 __init__.py 以将它们标记为可导入

  • 在 main_class.py 中:将 import submodule1import module.submodule1 替换为 from 。导入子模块 1

  • 在 main_class_super.py 中:将 import module.main_class 替换为 from .module import main_class

这样你就不必关心任何外包结构。

使用绝对和显式相对导入的选项 was added在 Python 2.5 中。

关于Python从子模块导入子模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38873614/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com