导入目录的机制';python中的s文件

导入目录的机制';python中的s文件,python,Python,我尝试在这样一个目录结构的包中导入一个模块。我发现了一件非常神奇的事情,我找不到解释 ➜ 测试树 . ├── main.py └── 包裹 └── 模块.py 如果main.py是 import package package.module import package from package import module package.module 这将是一个错误 Traceback (most recent call last): File "main.py", line 2,

我尝试在这样一个目录结构的包中导入一个模块。我发现了一件非常神奇的事情,我找不到解释

➜  测试树
.
├── main.py
└── 包裹
└── 模块.py
如果
main.py

import package
package.module
import package
from package import module
package.module
这将是一个错误

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

没有错误

结果是一样的,即使我在
包中添加了
\uuu init\uuuu.py

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


我认为应该有一个优雅的方法来做到这一点,我也想知道这种现象的机制。提前感谢。

当您导入包时,Python认为您正在导入一个模块,您也可以在异常描述中看到(称为
模块“包”
):

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

from package import module
module
如果需要特定的函数/类,请执行以下操作:

from package.module import Class
instance = Class()
关于您对这两条import语句的观察,Python似乎保留了模块来自的包的引用,因此它允许在分别导入这两条语句时链接名称。但实际上并不需要链接。如果要保留模块来自的包的引用,请参阅
模块。\uuuu name\uuuu
属性,或使用
as

from package import module as 'package_module'
print(package_module.__name__) # returns 'package.module'
虽然那很难看

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