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.