我在使用“导入模块”而不是“从模块导入…”语法时遇到问题。这清楚地表明我对加载模块的理解是不够的。据我在其他地方发现的,这种差异主要是一个风格问题,但这并不能解释以下情况
我使用
sudo apt install python3-ase
我尝试了以下方法:
import ase
ase.io.read
哪个输出
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: module 'ase' has no attribute 'io'
但是,在尝试的时候,
from ase.io import read
read
或-亦有可能-
from ase.io import read
import ase
ase.io.read
我得到输出
<function read at 0x7f33dc721730>
后者是理想的结果,因为我想使用ase.io.read函数来读取.cif文件
有关问题根源的更多信息,请参见以下python会话:
import sys
import ase
sys.modules['ase']
模块“ase”来自“/home/vanbeverj/Programs/anaconda3/envs/abienv/lib/python3.6/site packages/ase/init.py”
dir(ase)
['Atom'、'Atoms'、'LooseVersion'、'所有'、'内置'、'缓存'、'文件'、'加载程序、'名称包、'strong>路径、'规范、'strong>版本、'ase'、'Atoms>、'Atom>、'cal>、'计算器、单元、约束、数据、dft、公式、几何体、np、并行、符号、系统、传输、单位、UTIL']
from ase.io import read
dir(ase)
['Atom'、'Atoms'、'LooseVersion'、'所有'、'内置'、'缓存'、'文件'、'加载程序、'名称包、'strong>路径、'规范、'strong>版本、'ase'、'Atoms>、'Atom>、'cal>、'计算器、单元、约束、数据、dft、公式、几何体、io、np、并行、符号、sys、传输、单位、UTIL']
“dir(ase)”命令有明显不同的输出。例如io子模块会发生什么情况?有人能解释一下引擎盖下发生了什么吗
我想这看起来像
tkinter
。 在tkinter
中,如果我们想使用ttk
,我们必须使用如果我们使用
然后它将显示
AttributeError: module 'tkinter' has no attribute 'ttk'
您可以在ase>
__init__.py
文件,import ase
表示导入__init__.py
中的所有类或函数from ase import io
,这可能意味着它将在ase文件夹中导入io
模块(io是一个独立的.py文件)是否将导入的子模块作为属性公开,或者是否导入子模块,取决于每个包
例如
os
导入并公开os.path
在您的例子中,
ase
不将io
子模块作为ase
的属性公开。(是否导入了io
是另一回事;您可以检查sys.modules
。)相关问题 更多 >
编程相关推荐