Projet

Général

Profil

Development #36894

Débuter la prise en charge de python3

Ajouté par Emmanuel Cazenave il y a plus de 4 ans. Mis à jour il y a plus de 4 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
14 octobre 2019
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

Certaines briques tournent en python3 en prod, il faudrait suivre cela.

Créer un deuxième venv, celui-ci python3, y installer les briques concernées plutôt que dans le venv python2.

Puis modifier dans les fichiers de configuration supervisord (et autres, faire le tour) le chemin des commandes de management.


Fichiers


Demandes liées

Lié à Publik Installation Développeur - Development #37142: Installer la dernière version de django avec laquelle on est compatibleNouveau22 octobre 2019

Actions
Lié à Publik Installation Développeur - Bug #37450: debug-toolbar mal configurée en python3Rejeté05 novembre 2019

Actions

Révisions associées

Révision ec80eaa5 (diff)
Ajouté par Emmanuel Cazenave il y a plus de 4 ans

move common python packages installation to roles/base (#36894)

Révision 23133f98 (diff)
Ajouté par Emmanuel Cazenave il y a plus de 4 ans

disable debug-toolbar in combo (#36894)

Not working in python3 probably because combo still uses MIDDLEWARE_CLASSES.

Révision 07984a87 (diff)
Ajouté par Emmanuel Cazenave il y a plus de 4 ans

run chrono and combo in python3 (#36894)

Historique

#1

Mis à jour par Emmanuel Cazenave il y a plus de 4 ans

  • Lié à Development #37142: Installer la dernière version de django avec laquelle on est compatible ajouté
#2

Mis à jour par Emmanuel Cazenave il y a plus de 4 ans

Question pour Fred qui est probablement le seul à tourner en local certaines briques en python 3, sur quelle version de python3 es-tu ? 3.5 comme en prod ?

#3

Mis à jour par Frédéric Péters il y a plus de 4 ans

3.7 (qui est la version actuelle de Python 3 dans usntable); mais j'ai aussi un venv en Python 3.5, au cas où (le seul cas utile jusqu'à présent ça a été sur des différences de comportements autour de json.load, avec les versions à partir de 3.6 plus souples dans ce qu'elles acceptent).

#4

Mis à jour par Emmanuel Cazenave il y a plus de 4 ans

  • Lié à Bug #37450: debug-toolbar mal configurée en python3 ajouté
#5

Mis à jour par Emmanuel Cazenave il y a plus de 4 ans

Ça commence par désactiver la toolbar qui gagne son propre ticket (#37450) parce que ça a l'air un peu galère.

Ensuite c'est tout comme on a dit, un deuxième env, on y installe chrono et combo et les dépendances qui vont bien, puis les chemins de conf qui changent pour leurs commandes de management et démons.

#7

Mis à jour par Emmanuel Cazenave il y a plus de 4 ans

  • Statut changé de Solution proposée à En cours

Le hobo-agent doit exécuter les commandes manage en python3 pour combo et chrono, ce n'est pas encore le cas avec mon patch.

#8

Mis à jour par Emmanuel Cazenave il y a plus de 4 ans

diff --git a/roles/hobo-agent/templates/hobo-agent-settings.j2 b/roles/hobo-agent/templates/hobo-agent-settings.j2
index f53a510..2b31f8d 100644
--- a/roles/hobo-agent/templates/hobo-agent-settings.j2
+++ b/roles/hobo-agent/templates/hobo-agent-settings.j2
@@ -9,7 +9,12 @@ AGENT_HOST_PATTERNS = {

 {% for appkey, app in apps.items() %}
 {% if appkey != 'wcs' %}
+{% if appkey in ('combo', 'chrono') %}
+{% filter upper %}{{appkey}}{% endfilter %}_MANAGE_COMMAND = "{{venv_py3_bin}}/{{app['project_name']}}-manage" 
+{% else %}
 {% filter upper %}{{appkey}}{% endfilter %}_MANAGE_COMMAND = "{{venv_bin}}/{{app['project_name']}}-manage" 
+{% endif %}
#9

Mis à jour par Benjamin Dauvergne il y a plus de 4 ans

  • Il n'y a pas d'exec en python :
    exec(open('{{src_dir}}/hobo/debian/debian_config_common.py').read())
    
  • Il faut faire @from future import print_function pour pouvoir utiliser print() en python2:
            print("Missing debug toolbar")
    
  • Si le retrait de l'installation de python-memcachde n'a pas de rapport avec python3 ça devrait aller dans un commit à part ou un autre ticket
  • Bon c'est dommage qu'on doive doublonner toutes les installations de paquet pour py2 et py3; ne connaissant pas bien ansible je n'ai pas de suggestion, je fais juste la remarque (ne pourrait-on faire une variable venv à laquelle on affecte venv2 puis venv3 et appeler deux fois la même tâche ?)
  • les {% if appkey... %} ça devient un peu le foutoir je verrai bien un truc comme ça plus clair :
    {% if appkey == 'wcs' %}
    # cas wcs
    {% elif appkey in ('combo', 'chrono') %}
    {% comment %}applications en python3{% endcomment %}
    # cas combo et chrono
    {% else %}
    {% comment %}cas général, applications Django toutjours en python2, devra disparaître{% endcomment %}
    ...
    {% endif %}
    
#10

Mis à jour par Benjamin Dauvergne il y a plus de 4 ans

  • Statut changé de Solution proposée à En cours
#11

Mis à jour par Emmanuel Cazenave il y a plus de 4 ans

Benjamin Dauvergne a écrit :

  • Il n'y a pas d'exec en python :

Si si https://docs.python.org/fr/2/reference/simple_stmts.html#exec, https://docs.python.org/fr/3/library/functions.html#exec, http://git.entrouvert.org/hobo.git/tree/debian/debian_config_settings_d.py .

  • Il faut faire @from future import print_function pour pouvoir utiliser print() en python2:

Le print a giclé dans #37920 (j'ai rebasé sur master).

  • Si le retrait de l'installation de python-memcachde n'a pas de rapport avec python3 ça devrait aller dans un commit à part ou un autre ticket

Pas de retrait, j'ai juste déplacé de roles/authentic/tasks/main.yml vers roles/base/tasks/main.yml . Ce n'est pas le seul déplacement de ce type, j'ai regroupé toutes les installations de package python 'transversaux' dans roles/base/tasks/main.yml . Ces installations étaient disséminés dans les roles/nom-de-la-brique/tasks/main.yml pour des raisons historiques foireuses et je commençais à trouver ça bordélique (il y avait des duplications). Maintenant dans un premier commit à part pour clarifier la chose.

  • Bon c'est dommage qu'on doive doublonner toutes les installations de paquet pour py2 et py3;

Oui d'accord (j'avais eu un peu la flemme de creuser) et voici maintenant avec une utilisation de loop qui résout ça et qui monte notre pré-requis ansible à 2.5 (pas de soucis, dans buster on est en 2.7).

  • les {% if appkey... %} ça devient un peu le foutoir je verrai bien un truc comme ça plus clair

D'accord également j'ai tenu compte.

#12

Mis à jour par Benjamin Dauvergne il y a plus de 4 ans

  • Statut changé de Solution proposée à Solution validée
  • Assigné à mis à Emmanuel Cazenave

Emmanuel Cazenave a écrit :

Benjamin Dauvergne a écrit :

  • Il n'y a pas d'exec en python :

Si si https://docs.python.org/fr/2/reference/simple_stmts.html#exec, https://docs.python.org/fr/3/library/functions.html#exec, http://git.entrouvert.org/hobo.git/tree/debian/debian_config_settings_d.py .

Ok c'est comme print, j'ai juste fait exec ça m'a répondu "Syntax Error" et j'ai conclu un peu vite.

Je mettrai bien ça dans son propre commit pour pouvoir le reverter sous peu (a priori il manque juste de passer combo en MIDDLEWARE) :

{% include 'middleware_class_debug_toolbar.j2' %}

#13

Mis à jour par Emmanuel Cazenave il y a plus de 4 ans

  • Statut changé de Solution validée à Solution déployée
commit 07984a871de5e14dc78f67695f833347af80f0c1
Author: Emmanuel Cazenave <ecazenave@entrouvert.com>
Date:   Tue Nov 26 17:51:35 2019 +0100

    run chrono and combo in python3 (#36894)

commit 23133f9888245b9a8e23ec0471f9cb47a2e6e27f
Author: Emmanuel Cazenave <ecazenave@entrouvert.com>
Date:   Thu Nov 28 13:58:17 2019 +0100

    disable debug-toolbar in combo (#36894)

    Not working in python3 probably because combo still uses MIDDLEWARE_CLASSES.

commit ec80eaa5a6072a157940cff54280379060a2c832
Author: Emmanuel Cazenave <ecazenave@entrouvert.com>
Date:   Tue Nov 26 17:15:14 2019 +0100

    move common python packages installation to roles/base (#36894)

Formats disponibles : Atom PDF