我遇到了使用“导入模块”而不是“从模块导入.”的问题。语法。这清楚地表明,我对加载模块的理解是不够的。据我在其他地方发现,这种差异主要是一个风格问题,但这并不能解释以下情况。
我安装了ase
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']来自'/home/vanbeverj/Programs/anaconda3/envs/abienv/lib/python3.6/site-packages/ase/init.py‘的模块'ase’
dir(ase)“atom”、“atoms”、“LooseVersion”、“all”、“builtins”、“cached”、“doc”、“fileE 219”、“E 120加载器E 221、E 122>名称>E 223、E 124包e 225、E 126路径代码>E 227>、E 128>>c<代码E 229/code>、代码E 130>、原子>。“计算器”、“单元”、“约束”、“数据”、“dft”、“公式”、“几何学”、“np”、“并行”、“符号”、“sys”、“transport”、“unit”、“utils”
from ase.io import read
dir(ase)“atom”、“atoms”、“LooseVersion”、“all”、“builtins”、“cached”、“doc”、“fileE 242”、“E 143/code>加载器E 244、E 145>名称>E 246、E 147包E 248、E 149路径代码>E 250、cc<代码atoms 153>、代码E 153>、原子>。“计算器”、“单元格”、“约束”、“数据”、“dft”、“公式”、“几何学”、“io”、“np”、“并行”、“符号”、“sys”、“传输”、“单位”、“utils”
“dir(Ase)”命令具有明显不同的输出。例如io子模块会发生什么?有人能解释一下引擎盖下面是怎么回事吗?
发布于 2020-02-19 14:21:45
是否将导入的子模块公开为属性,或者是否导入子模块,取决于每个包。
例如,os确实导入和公开了os.path。
在您的示例中,ase不将io子模块公开为ase的属性。(是否导入了io是另一回事;您可以检查sys.modules。)
发布于 2020-02-19 14:27:24
我觉得这看起来像tkinter。在tkinter中,如果我们想要使用ttk,就必须使用
import tkinter
from tkinter import ttk 如果我们用
import tkinter
.......
btn = tkinter.ttk.Button(xxxxxx)然后它将向AttributeError: module 'tkinter' has no attribute 'ttk'展示。
您可以看到ase模块source.In ase > __init__.py文件,import ase意味着导入__init__.py中的所有类或函数。
from ase import io,也许这意味着它将在ase文件夹中导入io模块(io是一个独立的.py文件)。
https://stackoverflow.com/questions/60302185
复制相似问题