首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >‘导入ase’不加载子模块'ase.io‘

‘导入ase’不加载子模块'ase.io‘
EN

Stack Overflow用户
提问于 2020-02-19 14:06:50
回答 2查看 729关注 0票数 1

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

我安装了ase

代码语言:javascript
复制
sudo apt install python3-ase

我尝试了以下几点:

代码语言:javascript
复制
import ase
ase.io.read

哪种输出

代码语言:javascript
复制
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: module 'ase' has no attribute 'io'

然而,当尝试

代码语言:javascript
复制
from ase.io import read
read

或者-也有可能-

代码语言:javascript
复制
from ase.io import read
import ase
ase.io.read

我得到了输出

代码语言:javascript
复制
<function read at 0x7f33dc721730>

后者是所需的结果,因为我希望使用ase.io.read函数读取.cif文件。

有关问题根源的更多信息显示在以下python会话中:

代码语言:javascript
复制
import sys
import ase
sys.modules['ase']

来自'/home/vanbeverj/Programs/anaconda3/envs/abienv/lib/python3.6/site-packages/ase/init.py‘的模块'ase’

代码语言:javascript
复制
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”

代码语言:javascript
复制
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子模块会发生什么?有人能解释一下引擎盖下面是怎么回事吗?

EN

回答 2

Stack Overflow用户

发布于 2020-02-19 14:21:45

是否将导入的子模块公开为属性,或者是否导入子模块,取决于每个包。

例如,os确实导入和公开了os.path

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

票数 2
EN

Stack Overflow用户

发布于 2020-02-19 14:27:24

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

代码语言:javascript
复制
import tkinter
from tkinter import ttk 

如果我们用

代码语言:javascript
复制
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文件)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60302185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档