Development #40288
Mise à jour de celery
0%
Description
Actuellement celery
est bloqué à sa version 3.
https://dev.entrouvert.org/projects/hobo/repository/revisions/d9860e047a64b81fd84c917d576186b28b8c0654
$ pip install celery Requirement already satisfied: celery in /home/nroche/envs/publik-env-py3/lib/python3.7/site-packages (3.1.26.post2) Requirement already satisfied: kombu<3.1,>=3.0.37 in /home/nroche/envs/publik-env-py3/lib/python3.7/site-packages (from celery) (3.0.37)
Or, la version de kombu
qui en dépend est incompatible avec le nouveau mot clé async
introduit par python 3.5.
https://www.python.org/dev/peps/pep-0492/
>>> import celery >>> from kombu.async File "<stdin>", line 1 from kombu.async ^ SyntaxError: invalid syntax
Kombu
4.2.0 corrige ce problème, en renommant le répertoire async
en asynchronous
.
Mais alors, les messages gérés par celery
doivent être des bits et non plus du texte.
Fichiers
Demandes liées
Révisions associées
python3: celery now handle text (#40288)
python3: use memory broker for tests (#40288)
tests: remove unused celery option (#40288)
Historique
Mis à jour par Frédéric Péters il y a environ 4 ans
- Lié à Bug #14016: se limiter à celery 3 ajouté
Mis à jour par Frédéric Péters il y a environ 4 ans
>>> import celery >>> from kombu.async File "<stdin>", line 1 from kombu.async ^ SyntaxError: invalid syntax
n'est pas du python correct, peu importe la version.
Python 3.5.3 (default, Sep 27 2018, 17:25:39) ... >>> import celery >>> from kombu.async import * >>>
Quel est le problème réellement rencontré ?
Mis à jour par Nicolas Roche il y a environ 4 ans
Je rencontre ce problème au lancement de l'agent hobo depuis l'environnement python3 :
$ hobo-agent File "/home/nroche/envs/publik-env-py3/lib/python3.7/site-packages/celery/utils/timer2.py", line 19 from kombu.async.timer import Entry, Timer as Schedule, to_timestamp, logger ^ SyntaxError: invalid syntax
J'anticipe (avec kombu mis à jour), mais je suis ensuite confronté à une autre régression : https://github.com/celery/celery/issues/3518
$ tox -e py3-coverage-hobo -- tests/test_theme.py --pdb ModuleNotFoundError: No module named 'kombu.transport.django'
Mis à jour par Nicolas Roche il y a environ 4 ans
- Fichier 0001-python3-upgrade-celery-as-python3-need-kombu-4.2.0-4.patch 0001-python3-upgrade-celery-as-python3-need-kombu-4.2.0-4.patch ajouté
- Fichier 0002-python3-celery-now-handle-bytes-40288.patch 0002-python3-celery-now-handle-bytes-40288.patch ajouté
- Fichier 0003-python3-remove-Django-ORM-transport-40288.patch 0003-python3-remove-Django-ORM-transport-40288.patch ajouté
- Statut changé de Nouveau à En cours
- Patch proposed changé de Non à Oui
Sur ma machine (python 3.7) les tests passent, mais ils bloquent avec jenkins (python 3.5 ?)
parce qu'ils utilisent le serveur rabbitmq, alors qu'il n'est pas (à raison) accessible pour les tests sur jenkins :
platform linux2 -- Python 2.7.13, pytest-4.6.9, py-1.8.1, pluggy-0.13.1 django: settings: hobo.settings (from env) rootdir: /var/lib/jenkins/workspace/obo-wip_wip_40288-upgrade-celery plugins: freezegun-0.4.1, celery-4.4.0, django-webtest-1.9.7, mock-2.0.0, django-3.8.0, cov-2.8.1 collected 135 items tests/test_cook.py ......... [ 6%]
Mis à jour par Nicolas Roche il y a environ 4 ans
- Fichier 0001-python3-upgrade-celery-as-python3-need-kombu-4.2.0-4.patch 0001-python3-upgrade-celery-as-python3-need-kombu-4.2.0-4.patch ajouté
- Fichier 0002-python3-celery-now-handle-bytes-40288.patch 0002-python3-celery-now-handle-bytes-40288.patch ajouté
- Fichier 0003-python3-use-memory-broker-for-tests-40288.patch 0003-python3-use-memory-broker-for-tests-40288.patch ajouté
- Fichier 0004-tests-remove-unused-celery-option-40288.patch 0004-tests-remove-unused-celery-option-40288.patch ajouté
- Statut changé de En cours à Solution proposée
Le transport (brocker) django
n'est plus disponible pour jouer les tests. Je l'ai remplacé par par le transport in-memory
:
https://kombu.readthedocs.io/en/latest/_modules/kombu/transport/memory.html
J'ai testé en python 2.7 (et aussi en 3.7). Les différentes fonctionalités de hobo accessibles via son menu burger me semblent toutes fonctionner ainsi que le déploiement via cook.
Mis à jour par Nicolas Roche il y a environ 4 ans
- Lié à Development #40257: Tourner en python3 ajouté
Mis à jour par Nicolas Roche il y a environ 4 ans
- Fichier 0002-python3-celery-now-handle-text-40288.patch 0002-python3-celery-now-handle-text-40288.patch ajouté
(en python3) Il faut également transformer le texte en bits pour passer les notifications d'authentique à subprocess.communicate
.
Je l'ai vu en réalisant que l'ajout d'un rôle n'était plus propagé aux briques.
Mis à jour par Nicolas Roche il y a environ 4 ans
- Statut changé de Solution proposée à En cours
Le paquet python-kombu proposé par stretch n'est pas compatible. https://packages.debian.org/stretch/python-kombu :
$ wget http://deb.debian.org/debian/pool/main/k/kombu/kombu_3.0.35.orig.tar.gz $ tar -zxf kombu_3.0.35.orig.tar.gz $ ls -d kombu-3.0.35/kombu/async* kombu-3.0.35/kombu/async
Mis à jour par Frédéric Péters il y a environ 4 ans
Mais dans stretch il y a python 3.5.
Est-ce que tu veux dire qu'une compatibilité avec celery 4 exclut la compatibilité avec celery 3 ?
Mis à jour par Nicolas Roche il y a environ 4 ans
Est-ce que tu veux dire qu'une compatibilité avec celery 4 exclut la compatibilité avec celery 3 ?
Non, c'est parce que je suis parti du postulat que l'on devait inscrire dans le fichier setup.py une dépendance qui couvre toutes les configurations (python 2.7, 3.5 et 3.7) à la fois.
(python3.7 est incompatible avec celery3 et je ne sais pas le spécifier sans impacter les autres environnements python)
Mis à jour par Frédéric Péters il y a environ 4 ans
Il me semble que tu veux juste retirer le <4 du setup.py; ça permettra au job jenkins de continuer à prendre la version <4 vu que celle-ci est spécifiée explicitement dans le tox.ini.
Mis à jour par Nicolas Roche il y a environ 4 ans
- Fichier 0001-python3-upgrade-celery-as-python3-need-kombu-4.2.0-4.patch 0001-python3-upgrade-celery-as-python3-need-kombu-4.2.0-4.patch ajouté
- Statut changé de En cours à Solution proposée
Oui (tout se règle dans le setup.py) :
install_requires=[ ... 'celery<4' if sys.version_info < (3,7) else 'celery',
Parce que https://docs.python.org/3/whatsnew/changelog.html#python-3-7-0-alpha-2 :
Make async and await proper keywords, as specified in PEP 492.
Mis à jour par Frédéric Péters il y a environ 4 ans
C'est vraiment nécessaire cette condition, 'celery' seul ça ne peut pas aller ?
Mis à jour par Nicolas Roche il y a environ 4 ans
C'est nécessaire sinon tout le monde passe en celery
4.
$ tox -r -e py2-coverage-hobo -- tests/test_emails.py -vv ... plugins: ... celery-4.0.0rc7 ... ...
(Dans le tox.ini je ne peux pas spécifier py35
et py37
car cela implique que ces 2 interpréteurs soient disponibles. Grâce à cette condition j'ai supprimé les précédentes dépendances du tox.ini
.)
Mis à jour par Frédéric Péters il y a environ 4 ans
- Statut changé de Solution proposée à Solution validée
Bah oui, si tu retires le "celery<4" du tox.ini. (je me mettais à oublier que tox est également utilisé en local...)
Mis à jour par Nicolas Roche il y a environ 4 ans
- Statut changé de Solution validée à Résolu (à déployer)
commit 3811e59b7d76f25d153059929b5a552d8a17888b Author: Nicolas ROCHE <nroche@entrouvert.com> Date: Tue Mar 3 08:36:41 2020 +0100 tests: remove unused celery option (#40288) commit fd7baecf9db56706161fb4746c71fbe2597c5a69 Author: Nicolas ROCHE <nroche@entrouvert.com> Date: Sun Mar 1 19:01:46 2020 +0100 python3: use memory broker for tests (#40288) commit 59b3228dcb4ee2e19640a00c5b5cd8254b0c790c Author: Nicolas ROCHE <nroche@entrouvert.com> Date: Sat Feb 29 13:20:49 2020 +0100 python3: celery now handle text (#40288) commit cf4d3d4a466ba972f329be2f175989b09ef202d7 Author: Nicolas ROCHE <nroche@entrouvert.com> Date: Fri Feb 28 23:12:53 2020 +0100 python3: upgrade celery as python3 need kombu >=4.2.0 (#40288)
Mis à jour par Frédéric Péters il y a environ 4 ans
- Statut changé de Résolu (à déployer) à Solution déployée
Mis à jour par Nicolas Roche il y a environ 4 ans
- Lié à Bug #41158: La mise à jour en python3 nécessite d'utiliser la version 4 de celery ajouté
python3: upgrade celery as python3 need kombu >=4.2.0 (#40288)