创建使用lxml的分布式程序包

问题描述

我创建了一个使用lxml的python包。
在setup.py中,我定义了:

packages=find_packages(),# required
python_requires='>=3.8,<4',install_requires=[
    'typer[all]','packaging','lxml'
]

测试,打包和部署工作正常。
但是,将程序包上传到我公司的PyPi信息库后,我尝试使用以下方法安装程序包:

pip install -i <mypypirepo> <mypackage>

我得到了一个很长的错误包括

Fatal error C1083: Cannot open include file: 'libxml/xpath.h': No such file or directory
    error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\BIN\\x86_amd64\\cl.exe' Failed with exit code 2
    *********************************************************************************
    Could not find function xmlCheckVersion in library libxml2. Is libxml2 installed?
    *********************************************************************************
    ----------------------------------------
ERROR: Command errored out with exit status 1: 'c:\python39\python.exe'

在尝试手动安装lxml时,我得到了相同的确切错误

我在stackoverflow上找到了解决方案,这些解决方案涉及手动下载兼容的wheel版本的lxml,然后使用pip安装它。
但是,lxml是程序包的一部分,最终用户应易于安装。

有什么方法可以解决这个问题,而不必强迫用户手动安装lxml

注意:此问题仅在将python从3.8升级到3.9之后才开始发生。

解决方法

截至2020年10月12日,PyPI上没有适用于python 3.9的lxml wheel。

如果像我一样使用窗户,这里有非官方的轮子:

https://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml