Project

General

Profile

Bug #100785

pip install -e bloqué sur la complilation Quixote (usage de l’API interne de Python)

Added by Paul Marillonnet about 2 months ago. Updated about 2 months ago.

Status:
Nouveau
Priority:
Normal
Assignee:
-
Target version:
-
Start date:
15 January 2025
Due date:
% Done:

0%

Estimated time:
Patch proposed:
No
Planning:
No

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

Related to Publik Installation Développeur - Développement #100823: Pouvoir pré-installer des chosesSolution proposée15 January 2025

Actions

History

#1

Updated by Paul Marillonnet about 2 months ago

  • Description updated (diff)
#2

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 ?

#3

Updated by Frédéric Péters about 2 months ago

(selon moi pas d'action possible dans w.c.s. pour le moment)

#4

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

#5

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 ?

#6

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

#7

Updated by Gael Pasgrimaud about 2 months ago

#8

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).

#9

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 ?

#10

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.

#11

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.

#12

Updated by Emmanuel Cazenave about 2 months ago

Et je peux aller manger mon chapeau, ça plante aussi en bookworm.

Also available in: Atom PDF