“导入ase”未加载子模块“ase.io”

2024-04-26 00:49:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我在使用“导入模块”而不是“从模块导入…”语法时遇到问题。这清楚地表明我对加载模块的理解是不够的。据我在其他地方发现的,这种差异主要是一个风格问题,但这并不能解释以下情况

我使用

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子模块会发生什么情况?有人能解释一下引擎盖下发生了什么吗


Tags: 模块文件fromioimportreaddirsys
2条回答

我想这看起来像tkinter。 在tkinter中,如果我们想使用ttk,我们必须使用

import tkinter
from tkinter import ttk 

如果我们使用

import tkinter

.......
btn = tkinter.ttk.Button(xxxxxx)

然后它将显示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

在您的例子中,aseio子模块作为ase的属性公开。(是否导入了io是另一回事;您可以检查sys.modules。)

相关问题 更多 >