Bug #100785
pip install -e bloqué sur la complilation Quixote (usage de l’API interne de Python)
0%
Description
J’ai shooté mon devinst et tenté une installation de zéro, la partie pip-installation de w.c.s. plante sur la compilation C de quixote :
x86_64-linux-gnu-gcc -fno-strict-overflow -Wsign-compare -DNDEBUG -g -O2 -Wall -fPIC -I/home/paul/envs/publik-env-py3/include -I/usr/include/python3.13 -c quixote/html/_c_htmltext.c -o build/temp.linux-x86_64-cpython-313/quixote/html/_c_htmltext.o quixote/html/_c_htmltext.c: In function ‘template_call’: quixote/html/_c_htmltext.c:651:10: error: implicit declaration of function ‘_PyArg_NoKeywords’ [-Wimplicit-function-declaration] 651 | if (!_PyArg_NoKeywords("TemplateIO", kw)) | ^~~~~~~~~~~~~~~~~ error: command '/usr/bin/x86_64-linux-gnu-gcc' failed with exit code 1 [end of output]
avec `_PyArg_NoKeywords` qui est reservé à un usage strictement interne à Python. Peut-être une erreur nouvellement levée par une version récente de gcc.
Côté Quixote upstream c’est déjà corrigé avec https://github.com/nascheme/quixote/commit/730227e2d2fb972542354ba8c0242cf64b6fc2a0 mais pas encore répercuté dans PyPI.
Pour aller plus loin dans mon installation devinst j’ai dû taper une branche temporaire qui contient le contournement:
diff --git a/setup.py b/setup.py
index f148fb1ea..b243898eb 100644
--- a/setup.py
+++ b/setup.py
@@ -175,7 +175,7 @@ setup(
maintainer_email='fpeters@entrouvert.com',
url='http://wcs.labs.libre-entreprise.org',
install_requires=[
- 'Quixote>=3.0',
+ 'Quixote@https://github.com/nascheme/quixote/archive/refs/heads/main.zip',
'django>=3.2',
'psycopg2',
'bleach[css]>=5.0',
(et pointer cette branche via le
wcs_version
de devinst)
Related issues
History
Updated by Frédéric Péters about 2 months ago
Une fois une nouvelle version de quixote publiée, on pourra dans w.c.s. la pointer, mais en attendant, publik-devinst ne permet pas d'installer manuellement la dépendance ?
Updated by Frédéric Péters about 2 months ago
(selon moi pas d'action possible dans w.c.s. pour le moment)
Updated by Gael Pasgrimaud about 2 months ago
Frédéric Péters a écrit :
Une fois une nouvelle version de quixote publiée, on pourra dans w.c.s. la pointer, mais en attendant, publik-devinst ne permet pas d'installer manuellement la dépendance ?
Non, on peut surcharger les versions (en fait des branches/tag) des checkout ici https://git.entrouvert.org/entrouvert/publik-devinst/src/branch/main/local-inventory.yml.example#L48
Mais dérrière ça pip install tout ça classiquement
Updated by Frédéric Péters about 2 months ago
- Project changed from w.c.s. to Publik Installation Développeur
Dans roles/authentic/tasks/main.yml,
- name: custom python-ldap pip installation ansible.builtin.pip: name: - python-ldap state: present extra_args: "--force-reinstall --no-binary python-ldap" virtualenv: "{{venv_py3}}"
Ça n'est pas possible d'imaginer quelque chose similaire pour quixote ?
Updated by Gael Pasgrimaud about 2 months ago
Frédéric Péters a écrit :
Dans roles/authentic/tasks/main.yml,
[...]
Ça n'est pas possible d'imaginer quelque chose similaire pour quixote ?
Si, mais il faudrait le prévoir pour potentiellement plein de choses. Tout ce qui contient du C ou qui ne serait pas assez à jour.
Je penses qu'on pourrait générer un requirements.txt à partir d'une template avant de pip install celui-ci. ça permettrais de pré-installer des choses au besoin via une variable type extra_requirements: [] qui s’ajouterait au contenu du fichier.
Ca devrait faire le job. cf https://stackoverflow.com/a/59095885
Peut-être qu'en prime ça fera moins de taches ansible.
Je vais voir ça
Updated by Gael Pasgrimaud about 2 months ago
- Related to Développement #100823: Pouvoir pré-installer des choses added
Updated by Paul Marillonnet about 2 months ago
Gael Pasgrimaud a écrit :
Frédéric Péters a écrit :
Une fois une nouvelle version de quixote publiée, on pourra dans w.c.s. la pointer, mais en attendant, publik-devinst ne permet pas d'installer manuellement la dépendance ?
Non, on peut surcharger les versions (en fait des branches/tag) des checkout ici https://git.entrouvert.org/entrouvert/publik-devinst/src/branch/main/local-inventory.yml.example#L48
Mais dérrière ça pip install tout ça classiquement
Oui c’était le contournement disgracieux évoqué ici en description de ticket (et qui bien sûr n’est pas du tout une solution au problème) :
$ grep wcs_version local-inventory.yml wcs_version: "tmp-paul/quixote-upstream"
où tmp-paul/quixote-upstream est la branche w.c.s. qui déclare le tarball Quixote upstream de github en dépendance.
Sans doute qu’il y a un moyen d’avoir ce ciblage de versions pour des dépendances indirectes aussi (sans trop savoir de mon côté si c’est vraiment quelque qu’on veut voir arriver dans devinst).
Updated by Frédéric Péters about 2 months ago
Je me demande quelle est la procédure pour installer, sur son publik-devinst, une version, par exemple de django, plus élevée que ce qui est installé via les modules. Et en imaginant que cette action est possible, n'est-elle pas également possible pour quixote ?
Updated by Gael Pasgrimaud about 2 months ago
je penses qu'avec cette PR tout deviendra possible. à part pour les paquets hardcodé de ce fichier. Et on pourrait rajouter des "si y a une version utilise la" un peu comme il y a pour django.
Updated by Emmanuel Cazenave about 2 months ago
Paul Marillonnet a écrit :
grep wcs_version local-inventory.yml wcs_version: "tmp-paul/quixote-upstream"
Ce contournement fonctionne correct ?
Frédéric Péters a écrit :
Je me demande quelle est la procédure pour installer, sur son publik-devinst, une version, par exemple de django, plus élevée que ce qui est installé via les modules. Et en imaginant que cette action est possible, n'est-elle pas également possible pour quixote ?
$ ~/envs/publik-env-py3/bin/pip install whatever
Ce qui fournit un autre contournement il me semble : faire le run de devinst qui plante, checkout des sources quixote, ~/envs/publik-env-py3/bin/pip install -e .
, relancer devinst.
Deux contournement plus 1/ un problème qui ne se produit qu'en sid 2/ qui sera réglera tout seul via une nouvelle version de quixote dans pypi, je suis vraiment partisan de pas alourdir devinst avec une gestion de cette situation.
Je me répète mais il me semble que les gens qui choisissent de tourner en unstable doivent accepter que ce soit instable, no offense intended.
Updated by Emmanuel Cazenave about 2 months ago
Et je peux aller manger mon chapeau, ça plante aussi en bookworm.