Version python 3.9.2 incompatible avec le plugin (version demande 3.7.x)

Pour un plugin que j’ai repris, j’ai utilisé pyenv. Ca te permet d’installer la version de python que tu veux et où tu veux (indépendant du système, désinstallation par suppression du répertoire).


Cette doc : GitHub - pyenv/pyenv-installer: This tool is used to install `pyenv` and friends.
En résumé

Si tu veux préciser où installer pyenv, par défaut sous $HOME/.pyenv :

export PYENV_ROOT=/répertoire/où/installer/pyenv

Pour que ce soit installé sous le plugin et supprimé avec le plugin, tu peux l’installer sous plugins/[nom du plugin]/ressources/_pyenv

En ssh (pas forcément root) tu peux l’installer :

curl https://pyenv.run | bash

Pour les tests tu peux rajouter les lignes qui vont bien dans ~/.bashrc :

cat >> ~/.bashrc<< EOF
export PYENV_ROOT="$PYENV_ROOT"
command -v pyenv >/dev/null || export PATH="\$PYENV_ROOT/bin:\$PATH"
eval "\$(pyenv init -)"
EOF

Là tu peux fermer le shell et le rouvrir pour prendre les modif en compte ou simplement lancer :

exec $SHELL

Installe la version dont tu as besoin (le dernière, histoire d’avoir les patches de sécurité) :

pyenv install 3.7.16

Déplace toi dans le répertoire où se trouve le script python à exécuter en python3.7 :

cd /foo/bar

Active la version de pyenv :

pyenv local 3.7.16

→ Cette ligne est magique, teste ceci :

python3 --version
cd ..
python3 --version

Tu auras 3.7.16 puis 3.9.2

Donc en shell, tu exécuteras le script avec la bonne version pour tes tests, mais le plugin pas. Pour ça, il faut modifier l’appel du script python :

        $pyenv_path = realpath(dirname(__FILE__) . '/../../ressources/_pyenv');
OU
        $pyenv_path = '/root/.pyenv';
OU
        $pyenv_path = '/répertoire/où/installer/pyenv';

        $cmd = 'export PYENV_ROOT="' . $pyenv_path . '"; command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"; eval "$(pyenv init -)"; ';
        $cmd .= 'cd ' . $script_path . '; '; // Là où se trouve ton script python
        $cmd .= 'nice -n 19 python3 TON_SCRIPT.py';

Là, ça va marcher à coup sûr.