lxml:未定义的变量etree

时间:2016-01-05 16:54:49

标签: python eclipse python-2.7 lxml

经过一段时间的休整后我回到了Python。以前工作的一些项目现在有lxml的问题。

我在本地安装了latest source from github并将其放在Eclipse项目中。

该项目在PyDev-PYTHONPATH中有以下内容:
/ $ {} PROJECT_DIR_NAME
/ $ {PROJECT_DIR_NAME} / SRC

在使用lxml的项目中,在项目参考中,我检查了lxml项目。
此项目中的文件包含:

import lxml

以黄色加下划线并带有警告:
未使用的导入:lxml

对于这一行:

from lxml import etree

它给出错误:
未解决的导入etree

像这样的一行:

kml = etree.Element("kml", nsmap = namespaces) 

有错误:未定义变量etree

此项目在PyDev-PYTHONPATH中也有以下内容:
/ $ {} PROJECT_DIR_NAME
/ $ {PROJECT_DIR_NAME} / src

我读过这个问题,但我没有看到答案:
Python 2.7 on Google App Engine, cannot use lxml.etree

在Windows 10,64位计算机上。这在使用Windows 7的同一台机器上不是问题。不确定这是否是问题所在。不会这么认为。

我在运行配置中找到了PYTHONPATH的值。它有lxml:

D:\Program Files\eclipse\plugins\org.python.pydev_3.9.2.201502050007\pysrc\pydev_sitecustomize;
D:\My Documents\eclipse\workspace2\StateDivision;
D:\My Documents\eclipse\workspace2\StateDivision\src;
C:\Python27\podbc64;
D:\My Documents\eclipse\workspace2\lxml;
D:\My Documents\eclipse\workspace2\lxml\src;
D:\My Documents\eclipse\workspace2\XlsxWriter;
C:\Python27\ArcGISx6410.3\DLLs;
C:\Python27\ArcGISx6410.3\lib;
C:\Python27\ArcGISx6410.3\lib\lib-tk;C:\Python27\ArcGISx6410.3;
C:\Python27\ArcGISx6410.3\lib\site-packages;
C:\Program Files (x86)\ArcGIS\Desktop10.3\bin64;
C:\Program Files (x86)\ArcGIS\Desktop10.3\ArcPy;
C:\Program Files (x86)\ArcGIS\Desktop10.3\ArcToolBox\Scripts

清理项目,切换到Python 3.5,PYTHONPATH现在看起来像这样:

D:\Program Files\eclipse\plugins\org.python.pydev_3.9.2.201502050007\pysrc\pydev_sitecustomize;
D:\My Documents\eclipse\workspace2\StateDivision;
D:\My Documents\eclipse\workspace2\StateDivision\src;
D:\My Documents\eclipse\workspace2\lxml;
D:\My Documents\eclipse\workspace2\lxml\src;
D:\My Documents\eclipse\workspace2\lxml\src\lxml;
C:\Python35-32\DLLs;
C:\Python35-32\lib;
C:\Python35-32;C:\Python35-32\lib\site-packages

仍然与etree有同样的错误。

编辑:

答案是不使用source(对windows使用python .exe安装程序)并使用from lxml import etree,而不是import lxml

1 个答案:

答案 0 :(得分:3)

您没有将etree模块作为全局名称导入模块,只导入lxml包本身。您需要从etree包中导入lxml模块:

from lxml import etree

请参阅lxml.etree tutorial

如果import lxml有效但from lxml import etree失败,则您的路径中有另一个lxml.py文件掩盖了包,您尝试使用的未编译的源代码分发。使用:

import lxml
print(lxml.__file__)

查找并重命名违规文件。

  • 如果它指向lxml.py删除或重命名该文件。
  • 如果它指向<PATH>/src/lxml/__init__.py您尝试使用未编译的源代码分发。您必须编译Python扩展代码,或者找到要安装的平台的二进制发行版。