lxml:未定义的变量 etree

lxml: Undefined variable etree

我在短暂的休息后回到 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 时仍然出现同样的错误。

编辑:

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

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

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 扩展代码,或者为您的平台找到一个二进制分发版来安装。