python中导入目录文件的机制

时间:2019-10-21 11:28:09

标签: python

我试图以这种目录结构将模块导入包中。我发现了一件非常令人惊奇的事情,我找不到解释。

➜  test tree
.
├── main.py
└── package
    └── module.py

如果main.py

import package
package.module

会有错误。

Traceback (most recent call last):
  File "main.py", line 2, in <module>
    package.module
AttributeError: module 'package' has no attribute 'module'

如果main.py

import package
from package import module
package.module

from package import module
import package
package.module

没有错误。

即使在__init__.py中添加package,结果也一样艰难

我不得不执行一个额外的命令来将模块导入包中,这很烦人。

我认为应该有一种优雅的方法来做到这一点,并且我也想知道这种现象的机理。预先感谢。

1 个答案:

答案 0 :(得分:0)

Python认为您在执行import package时正在导入模块,您也可以在异常描述中看到它(例如module 'package'):

AttributeError: module 'package' has no attribute 'module'

您应该导入并直接查找模块:

from package import module
module

如果要特定的功能/类,请执行以下操作:

from package.module import Class
instance = Class()

关于您使用两个import语句观察到的内容,Python似乎保留了模块来源包的引用,因此当两个名称分别导入时,它允许链接名称。但实际上并不需要链接。如果要保留模块来源软件包的引用,请查阅module.__name__属性,或使用as

from package import module as 'package_module'
print(package_module.__name__) # returns 'package.module'

虽然很丑。