xmlsec / python-xmlsec

Python bindings for the XML Security Library.
MIT License
95 stars 99 forks source link

Fails to build "lxml-version.h: No such file or directory" #198

Closed yoganlava closed 2 years ago

yoganlava commented 2 years ago

Suddenly failed to build recently. Might be due to the new release of lxml that came out

#11 22.22   /tmp/pip-install-w06wmd73/xmlsec_b455cf60a688463dbc08380657687275/src/lxml.h:18:10: fatal error: lxml-version.h: No such file or directory
#11 22.22      18 | #include <lxml-version.h>
#11 22.22         |          ^~~~~~~~~~~~~~~~
#11 22.22   compilation terminated.
#11 22.22   error: command 'gcc' failed with exit status 1
bharling commented 2 years ago

Getting exactly the same thing this morning suddenly

BeryJu commented 2 years ago

lxml 4.6.5 and 4.7 that came out within the last 20 hours cause this, as xmlsec does not have an upper version limit, and the mentioned versions 4.7.0 remove the lxml-version.h file.

To fix this, you can install xmlsec like this

pip install lxml==4.6.5
export C_INCLUDE_PATH=/usr/local/lib/python3.10/site-packages/lxml/includes
pip install xmlsec
bharling commented 2 years ago

lxml 4.6.5 and 4.7 that came out within the last 20 hours cause this, as xmlsec does not have an upper version limit, and the mentioned versions remove the lxml-version.h file.

To fix this, you can install xmlsec like this

pip install lxml==4.6.4
export C_INCLUDE_PATH=/usr/local/lib/python3.10/site-packages/lxml/includes
pip install xmlsec

Thanks - this solved it for me

ilpianista commented 2 years ago

lxml 4.6.5 and 4.7 that came out within the last 20 hours cause this, as xmlsec does not have an upper version limit, and the mentioned versions remove the lxml-version.h file.

If so, why the need for C_INCLUDE_PATH?

pip install lxml==4.6.4 xmlsec should be sufficient, shouldn't it? (spoiler: it's not, but I'm wondering why)

graingert commented 2 years ago

lxml 4.6.5 has the lxml/includes/lxml-version.h file for me

BeryJu commented 2 years ago

lxml 4.6.5 and 4.7 that came out within the last 20 hours cause this, as xmlsec does not have an upper version limit, and the mentioned versions remove the lxml-version.h file.

If so, why the need for C_INCLUDE_PATH?

pip install lxml==4.6.4 xmlsec should be sufficient, shouldn't it? (spoiler: it's not, but I'm wondering why)

I got that C_INCLUDE_PATH from the lxml docs when installing on Mac (despite me installing on linux).

I think the reason its needed is because lxml is declared as build dependency for xmlsec, so it downloads another copy during buiild, in which the latest version is downloaded?

BeryJu commented 2 years ago

lxml 4.6.5 has the lxml/includes/lxml-version.h file for me

Good point, updateed the above to use 4.6.5

graingert commented 2 years ago

I have a launchpad bug here https://bugs.launchpad.net/lxml/+bug/1954644

hoefling commented 2 years ago

The lxml-version.h should be created on installation (spot in setup script), but it's not and it's missing in the latest lxml wheels. On the first sight, it looks like a (temporary) lxml bug to me, so we can just yank the faulty versions from lxml dependency range.

Another workaround could be discarding lxml wheels for now, should you use those:

$ pip install lxml --no-cache-dir --no-binary=lxml
$ pip show -f lxml | grep -i version
Version: 4.7.0
  lxml/includes/lxml-version.h
graingert commented 2 years ago

@scoder can you yank the lxml 4.7.0 release please?

scoder commented 2 years ago

Thanks for notifying me. I looked through the build logs but couldn't find any reason for this happening. Sadly, fluctuations in cosmic radiation aren't reflected in the log output, however widespread their effect across all wheels may be.

I'll remove the release.

graingert commented 2 years ago

@hoefling can you pin this issue, please?

graingert commented 2 years ago

I'll remove the release.

@scoder please don't remove the release - instead yank it: see https://pypi.org/help/#yanked

graingert commented 2 years ago

ah I see you did yank it, thanks a lot!

scoder commented 2 years ago

I'll remove the release.

@scoder please don't remove the release - instead yank it: see https://pypi.org/help/#yanked

That's what I did.