Создайте распределенный пакет, использующий lxml

Я создал пакет Python, который использует lxml.
В 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.


person Alex Weitz    schedule 09.10.2020    source источник
comment
Проблема не связана с pip. Некоторые пакеты полагаются на системные библиотеки, в данном случае это libxml2. Это не то же самое, что пакет PyPI; lxml ожидает, что вы установите библиотеку вручную.   -  person Marat    schedule 09.10.2020
comment
@AMC Нет, это не так, поскольку данный ответ требует, чтобы пользователь буквально зашел на веб-сайт, что-то скачал и вручную установил.   -  person Alex Weitz    schedule 13.10.2020
comment
Это может быть полезно: stackoverflow.com/q/3493151   -  person AMC    schedule 13.10.2020


Ответы (1)


На момент написания этой статьи 12.10.2020 в PyPI нет колеса lxml для Python 3.9.

Если вы используете окна, как я, здесь есть неофициальные колеса:

https://www.lfd.uci.edu/%7Egohlke/pythonlibs/#lxml

person Efrain Vergara    schedule 12.10.2020