python中lxml的导入错误

python中lxml的导入错误,python,lxml,Python,Lxml,几天前我写了一个脚本,其中包含 from lxml import etree 但是,不幸的是,它不再起作用了。 如果有疑问,我检查了安装: sudo apt-get install python-lxml sudo pip install lxml sudo apt-get install libxml2-dev sudo apt-get install libxslt1-dev me@pc:~$ python Python 2.7.3 (default, Sep 14 2012, 14:1

几天前我写了一个脚本,其中包含

from lxml import etree
但是,不幸的是,它不再起作用了。 如果有疑问,我检查了安装:

sudo apt-get install python-lxml
sudo pip install lxml
sudo apt-get install libxml2-dev
sudo apt-get install libxslt1-dev
me@pc:~$ python
Python 2.7.3 (default, Sep 14 2012, 14:11:57) 
[GCC 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import lxml
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named lxml
我检查了它是否可能是我的python版本:

sudo apt-get install python-lxml
sudo pip install lxml
sudo apt-get install libxml2-dev
sudo apt-get install libxslt1-dev
me@pc:~$ python
Python 2.7.3 (default, Sep 14 2012, 14:11:57) 
[GCC 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import lxml
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named lxml

不知道为什么,也不知道是否有差异,但它正在按预期工作。

编辑中引用的解决方案,使用xml.etree而不是lxml.etree,正如这些模块所知,这并不是更好的方法,主要是因为lxml肯定更有效

提供清洁环境的一个好方法是使用virtualenv

$ virtualenv myproject
$ cd myproject
$ ./bin/pip install lxml # Repeat this with other dependencies
[wait for download and compiling]
然后,使用/bin/python执行脚本。 这种方法的优点是:

  • 系统和项目之间可以有不同版本的依赖关系
  • 即使您破坏了虚拟环境中的一切,也不会损害系统的其余部分
  • 进行安装不需要root权限
作为参考,实现这一点的一种更强大但稍微复杂的方法是使用,但如果您只想执行一个简单的单文件脚本,它看起来就像用火箭筒捕蝇一样。

解决了这个问题

似乎我安装的软件弄乱了我的python路径。我在终端中调用python时使用的python是软件安装的python,脚本调用的python是安装在系统上的python


因此,我刚刚从bash的path变量中删除了软件的python路径。

对于python 3.6,这是非常棘手的


我也遇到了同样的问题,并尝试安装最新版本lxml3.8。但我仍然得到了错误。然后我使用lxml3.7.3,然后就可以了。

我在PyCharm中运行测试时遇到了这个问题。我可以在使用终端和虚拟环境时导入lxml,但是使用相同的虚拟环境来运行测试会导致导入错误


在我的例子中,从lxml 3.3.5升级到4.2.5解决了这个问题。

这可能与您的Python环境有关。这里有三种故障排除方法,从最简单到最麻烦

1) 通过pip重新安装 2) 通过IDE重新安装
  • 从终端卸载它(
    pip uninstall lxml
  • 在python文件开头添加lxml导入etree的
  • 让我的IDE(PyCharm)显示缺少的导入错误
  • 将鼠标悬停在错误上,并通过错误修复弹出窗口(不是终端)从IDE安装它
3) 重新创建虚拟环境
假设您在虚拟环境中工作(如果不是,您和您的家人会感到羞耻):删除并创建一个新环境

如果您与conda打交道,我发现“成功”安装后,我的conda安装lxml无法正常工作

尝试用pip卸载并重新安装,这对我来说很有效

conda remove lxml

pip install lxml

这就是为
virtualenv
而设计的。pip install lxml
的结果是什么?编译它所需的库紧随其后,这看起来很奇怪……sudo pip install lxml的输出是什么?此外,如果您想使用
pip
安装
lxml
,您需要安装
python-dev
package。我不认为为每个脚本创建一个virtualenv是有效的。sudo-pip-install-lxml输出是:需求已经满足(使用--upgrade-to-upgrade):lxml in/usr/local/lib/python2.7/dist-packages Cleaning up…当您从
xml
导入
etree
时,您将无法获得与
lxml
提供的
etree
模块相同的模块。如果您无法导入
lxml
,则该模块不会安装在Python可以找到它的位置。我知道虚拟环境d pip是有用的,但正如我所说的,为我的每个脚本创建虚拟环境不是目的。请查看我的答案以了解我的问题所在!是的,这似乎也是我的问题所在。在我的情况下,它与MAMP冲突。
sudo easy_install lxml
显示:
在以下目录中针对libxml2/libxslt构建:/Appli阳离子/MAMP/Library/lib………/tmp/easy_install-KzJaeI/lxml-3.2.5/src/lxml/includes/etree_defs.h:9:10:致命错误:“未找到libxml/xmlversion.h”文件
。命令
echo$PATH
显示
$echo$PATH/Applications/MAMP/Library/bin:/Applications/MAMP/bin/php/php5.26/bin:/Users/admin/.composer/ventor/bin:/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
为什么不从前面提到的xml包中导入?工作正常:-)谢谢damonxu,这里也一样。在卸载3.8并安装3.7.3之后,lxml 3.8导入错误,其工作正常