开发者社区> 问答> 正文

当我从模块内部运行文件时,文件导入工作,但是当我通过从外部导入模块来运行文件时,文件导入不起作用

我的目录结构:

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 *并尝试运行它(没有任何其他代码)时,它会给出一个错误,该错误会追溯到importer.py中的import语句, No module named 'importee'

如果它的事项,将__init__.py在module目录中有__all__正确指定功能。

我认为这不是重复的,尽管有类似的标题帖子,例如this或this或this或this ; 我一直在寻找几个小时,但仍然不知道是什么原因引起的。

编辑:四个文件的内容:

init.py

all = ["importee", "importer"]
importee.py

def example():

print("hey")

importer.py

from importee import *
example()
test.py

from module import *
当我运行importer.py时我没有错误,但是当我运行test.py时,我得到一个错误,它追溯到importer.py的第一行No module named 'importee' found,即使我在运行importer.py时没有收到该错误

展开
收起
一码平川MACHEL 2019-01-22 10:54:01 1747 0
1 条回答
写回答
取消 提交回答
  • 无论您是python test.py从root还是python importer.py从module。

    您可以从PEP 328了解有关相关导入的更多信息:从__init__导入时运行module。

    此外,定义__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()

    2019-07-17 23:26:10
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
JS 语言在引擎级别的执行过程 立即下载
APP加固新方向 --混淆和瘦身 立即下载
低代码开发师(初级)实战教程 立即下载