gpt4 book ai didi

python - 当我从模块内部运行文件时,文件导入有效,但当我通过从外部导入模块来运行文件时,文件导入无效

转载 作者:太空宇宙 更新时间:2023-11-03 21:20:38 24 4
gpt4 key购买 nike

我的目录结构:

test.py
module/
importer.py
importee.py
__init__.py

所以在我的目录中,我有 test.py,然后是另一个已初始化为模块的目录。在该模块中,有一个文件 importer.py,它导入文件 importee.py。为了测试导入是否有效,我在 importee.py 中做了一个简单的函数,并尝试在 importer.py 中使用它(即我直接运行 importer.py );它工作得很好。

但是当我进入 test.py 并使用 import 语句 from module import * 并尝试运行该语句(没有任何其他代码)时,它会给出一个错误,该错误可追溯到 import 语句在 importer.py 中,说没有名为“importee”的模块

如果重要的话,module 目录中的 __init__.py 已正确指定 __all__ 函数。

我认为这不是重复的,尽管有类似标题的帖子,例如 thisthisthisthis ;我已经搜索了几个小时,但仍然不知道是什么原因造成的。

有什么想法吗?非常感谢任何帮助。

编辑:四个文件的内容:

初始化.py

__ all __ = ["importee", "importer"]

导入者.py

def example():
print("hey")

导入器.py

from importee import * 
example()

测试.py

from module import * 

当我运行 importer.py 时,我没有收到任何错误,但是当我运行 test.py 时,我收到一个错误,该错误可追溯到 importer.py 的第一行,指出 No module returned 'importee' find,即使我直接运行 importer.py 时没有收到该错误...

最佳答案

无论您是从 root 运行 python test.py 还是从 module 运行 python importer.py,以下命令都会运行并打印“hey” 。

您可以了解有关 PEP 328 相对导入的更多信息。您可以了解有关 init here 的更多信息。 ,但我希望您从中学到的重要一点是,当您从 module 导入时,__init__ 就会运行。

此外,定义 __all__ 会覆盖以 _ 开头的标识符,并且由于您没有使用它们,所以我实际上不知道它会产生任何影响。

# test.py
from module import *
<小时/>
# module/__init__.py
from .importer import *
<小时/>
# module/importee.py
def example():
print("hey")
<小时/>
# module/importer.py
from .importee import *

example()

关于python - 当我从模块内部运行文件时,文件导入有效,但当我通过从外部导入模块来运行文件时,文件导入无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54282361/

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