【问题标题】:ImportError: No module named lxml , although lxml is installedImportError:没有名为 lxml 的模块,尽管已安装 lxml
【发布时间】:2022-01-14 17:56:01
【问题描述】:

我正在尝试在 virtualenv 中安装 gcovr 工具,并且工具安装良好,但是在运行二进制文件时,我看到 lxml 警告,我该如何解决这个问题?

使用的命令:

pip install virtualenv
virtualenv env
source env/bin/activate
wget https://bootstrap.pypa.io/pip/2.7/get-pip.py
python get-pip.py
sudo yum -y install libxslt-devel libxml2-devel

which gcovr
pip install gcovr
gcovr --help

我看到以下错误(添加部分日志):

20:40:03 + which gcovr
20:40:03 /home/ec2-user/workspace/unit-test-coverage-test-2/temp_sbk/env/bin/gcovr
20:40:03 + pip install gcovr
20:40:03 DEPRECATION: Python 2.7 reached the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 is no longer maintained. pip 21.0 will drop support for Python 2.7 in January 2021. More details about Python 2 support in pip can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-support pip 21.0 will remove support for this functionality.
20:40:03 Requirement already satisfied: gcovr in ./env/lib/python2.7/dist-packages (4.2)
20:40:04 Collecting lxml
20:40:04   Using cached lxml-4.7.1-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl (5.5 MB)
20:40:04 Requirement already satisfied: jinja2 in ./env/lib/python2.7/dist-packages (from gcovr) (2.11.3)
20:40:04 Collecting MarkupSafe>=0.23
20:40:04   Using cached MarkupSafe-1.1.1-cp27-cp27mu-manylinux1_x86_64.whl (24 kB)
20:40:04 Installing collected packages: lxml, MarkupSafe
20:40:04 Successfully installed MarkupSafe-1.1.1 lxml-4.7.1
20:40:04 + gcovr --help
20:40:04 Traceback (most recent call last):
20:40:04   File "/home/ec2-user/workspace/unit-test-coverage-test-2/temp_sbk/env/bin/gcovr", line 5, in <module>
20:40:04     from gcovr.__main__ import main
20:40:04   File "/home/ec2-user/workspace/unit-test-coverage-test-2/temp_sbk/env/local/lib/python2.7/dist-packages/gcovr/__main__.py", line 54, in <module>
20:40:04     from .cobertura_xml_generator import print_xml_report
20:40:04   File "/home/ec2-user/workspace/unit-test-coverage-test-2/temp_sbk/env/local/lib/python2.7/dist-packages/gcovr/cobertura_xml_generator.py", line 11, in <module>
20:40:04     from lxml import etree
20:40:04 ImportError: No module named lxml

编辑 1:

我尝试安装 lxml,看起来 lxml 已经安装但没有出现在 virtualenv 中

(env) [temp_sbk]$ pip install lxml
Collecting lxml
  Using cached lxml-4.7.1-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl (5.5 MB)
Installing collected packages: lxml
Successfully installed lxml-4.7.1

(env) [temp_sbk]$ pip show lxml
WARNING: Package(s) not found: lxml

【问题讨论】:

  • 检查 shebang:head -1 $(which gcovr) — 是否指向 virtualenv 中的 Python?
  • 是的,它指向了virtualenv中的Python (env)[temp_sbk]$ head -1 $(which gcovr) #!/home/ec2-user/workspace/unit-test-coverage-test-2/temp_sbk/env/bin/python
  • 我尝试安装 lxml pip install lxml 并查看消息 Successfully installed lxml-4.7.1 ,但 pip show lxml 返回 WARNING: Package(s) not found :lxml
  • 相当奇怪。不解……
  • which pip 更有可能没有为您尝试使用的 Python 版本提供 pip。改用 python -m pip,它应该在 virtualenv 中解析。

标签: python virtualenv lxml gcovr


【解决方案1】:

经过一晚上的思考,今天早上我成功修复了它: 虽然你已经在你的电脑上安装了它,但也许你的路径有误。

1.转到 D:(Your Project Folder)\venv\Lib\site-packages 查找是否有名为“lxml”和“lxml-(version).dist-info”的文件夹。

2.然后将它们复制到该位置: D:(你的项目文件夹)\Lib\site-packages

希望对你有帮助!

【讨论】:

  • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center