我使用Python3.8构建了一个小实用程序。除此之外,它还使用beautifulsoup4和lxml从XML文件中提取一些数据。我使用PyCharm和virtualenv进行开发,我的实用程序运行良好
为了将util分发给其他人,我有一个构建脚本,它将我的代码复制到dist
目录,并使用pip install -r requirements.txt -t dist
将所有依赖项安装到该目录中。这也很好,我可以从我的系统解释器(3.8,没有beautifulsoup,没有lxml)运行dist
目录中的代码。看起来,依赖项可以从dist
加载
不过,它在其他机器上不起作用。脚本生成错误消息
Couldn't find a tree builder with the features you requested: lxml. Do you need to install a parser library?
这意味着beautifulsoup4找不到lxml(与“lxml”或“xml”相同)。但是dist
目录中的依赖项似乎是正确的。似乎什么都没有遗漏。当我使用python -m zipapp -p "python" dist
将脚本打包为zip应用程序时,会遇到相同的错误,这将生成一个文件dist.pyz
。它可以在我自己的机器上执行,但会遇到相同的错误消息
这是我的requirements.txt文件:
beautifulsoup4
jinja2
lxml
这是BeautifulSoup解析器的实例化:
soup = BeautifulSoup(xml_data, features='lxml')
xml_数据只是一个字符串,其中包含从另一个工具生成的文件中读取的有效xml
我没有主意了。我对.NET和Java有很多经验,但我不是这个星球上最伟大的Python程序员。似乎我已经进入了依赖地狱的Python版本。。。我真的不想让脚本用户在他们的机器上调用pip install lxml
。我想发布一个包含所有依赖项的自包含应用程序
感谢您的帮助
更新
requirements.txt中条目的顺序没有区别(正如我所希望的那样)
我补充说
from lxml.builder import ElementMaker
...
e = ElementMaker()
到主脚本,以便将lxml导入到我的脚本中。这就产生了错误
Traceback (most recent call last): File "C:\Program Files\Python38\lib\runpy.py", line 194, in _run_module_as_main return _run_code(code, main_globals, None, File "C:\Program Files\Python38\lib\runpy.py", line 87, in run_code exec(code, run_globals) File "dist.pyz_main.py", line 4, in File "", line 259, in load_module File "dist.pyz\lrg.py", line 3, in File "", line 259, in load_module File "dist.pyz\lxml\builder.py", line 44, in ModuleNotFoundError: No module named 'lxml.etree'
当作为zip应用程序运行,但在使用virtualenv的IDE中运行良好时
目前没有回答
相关问题 更多 >
编程相关推荐