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

时间:2019-01-21 00:58:14

标签: python python-3.x import python-module

我的目录结构:

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__函数。

尽管有类似标题的帖子,例如thisthisthisthis,我还是想这不是重复的;我一直在搜索数小时,但仍然不知道是什么原因造成的。

有什么想法吗?任何帮助将不胜感激。

编辑:四个文件的内容:

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时出现该错误...

1 个答案:

答案 0 :(得分:0)

无论从root运行148 0209-3SP_block_1 ['g76p010060q00250r.0005' 'JEBD0507160 REV A' CHNCIII 149 0209-3SP_block_2 ['g76x.3761z-.500p03067q03067f.05' 'JEBD0507160 REV A' CHNC III 150 0209-5SP_block_1 ['g76p020060q00250r.0005' 'JEBD0507160 REV A' CHNC III 151 0209-5SP_block_2 ['g76x.3767z-.48p03067q03067f.05' 'JEBD0507160 REV A' CHNC III 152 0210-3SP_block_1 ['g76p010060q00250r.0005' 'JEBD0507160 REV A' CHNC III 还是从python test.py运行python importer.py,以下命令都会运行并显示“嘿”。

您可以从PEP 328了解更多有关相对导入的信息。您可以了解有关初始化here的更多信息,但是我想从中获得的重要一点是,module在您从__init__

此外,定义module会覆盖以__all__开头的标识符,并且由于您没有使用它们,因此我实际上并不知道它会产生什么作用。

_

# test.py
from module import *

# module/__init__.py
from .importer import * 

# module/importee.py
def example():
    print("hey")