首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >lxml错误on Windows - AttributeError:模块'lxml‘没有属性'etree’

lxml错误on Windows - AttributeError:模块'lxml‘没有属性'etree’
EN

Stack Overflow用户
提问于 2016-12-10 02:13:47
回答 1查看 8.9K关注 0票数 13

我在32位Windows上使用Anaconda v4.2和Python 3.5,并希望使用lxml etree。我的Anaconda发行版包含lxml3.6.4,但是我的集成开发环境(PyCharm,尽管我在使用Jupyter Notebook运行代码时遇到同样的错误)可以看到的惟一lxml函数是get_include()。以下代码:

代码语言:javascript
复制
import lxml
full_xml_tree = lxml.etree.parse('myfile.xml')

这只会给我一个错误:

代码语言:javascript
复制
AttributeError: module 'lxml' has no attribute 'etree'

我也尝试过安装Windows版的VisualC++编译器,但这并没有什么不同。我尝试在命令行中使用conda重新安装lxml,同样没有更改我的错误。我遗漏了什么?看起来lxml.get_include()函数没有找到任何要包含的文件,我也不太理解etree.cp35-win32.pyd文件(我假设它包含编译后的etree代码??)应该与lxml包相关联。任何帮助都非常感谢!

凯茜

EN

回答 1

Stack Overflow用户

发布于 2018-05-25 20:39:20

这在导入etree (ElementTree)子包的方式上有点奇怪。

您必须显式导入子包才能使其可用:

代码语言:javascript
复制
import lxml.etree
full_xml_tree = lxml.etree.parse('myfile.xml')

要实现您想要做的事情,推荐的方法是导入ElementTree模块:

代码语言:javascript
复制
import xml.etree.ElementTree as ET
tree = ET.parse('myfile.xml')

请参阅:https://docs.python.org/3.6/library/xml.etree.elementtree.html

这一切为什么要发生?

想象一个具有如下目录结构的包:

代码语言:javascript
复制
test_pkg/__init__.py
test_pkg/shown_module.py
test_pkg/hidden_module.py

其中__init__.py包含以下内容:

代码语言:javascript
复制
from . import shown_module

通过此包,您可以直接使用shown_module

代码语言:javascript
复制
>>> import test_pkg
>>> test_pkg.shown_module
<module 'test_pkg.shown_module' from '.../test_pkg/shown_module.py'>

但是hidden_module不能直接使用:

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

但如果导入,则可以使用它:

代码语言:javascript
复制
>>> import test_pkg.hidden_module
>>> test_pkg.hidden_module
<module 'test_pkg.hidden_module' from '.../test_pkg/hidden_module.py'>

然而,我不知道为什么ElementTree是“隐藏”的。

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

https://stackoverflow.com/questions/41066480

复制
相关文章

相似问题

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