[PYTHON] pyenv à l'échelle du système

Conditions préalables

procédure

Ci-dessous, exécutez tout en tant que root.

#Incluez les packages nécessaires pour construire python
# https://github.com/pyenv/pyenv/wiki#suggested-build-environment
yum install gcc zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel openssl-devel tk-devel libffi-devel

# install pyenv
mkdir -p /usr/local/opt
git clone https://github.com/pyenv/pyenv.git /usr/local/opt/pyenv

#Spécification de version
cd /usr/local/opt/pyenv
git log --oneline --decorate --tags
#L'étiquette qui arrive en haut est la dernière
git checkout v1.2.18

#Lorsque vous vérifiez quelle version plus tard
# git log --oneline --decorate --tags
#Pour voir quelle balise correspond à HEAD

cat << 'EOF' > /etc/profile.d/pyenv.sh
export PYENV_ROOT="/usr/local/opt/pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
EOF

source /etc/profile.d/pyenv.sh

#Mettez le python requis
pyenv install 3.6.10

Si vous souhaitez l'utiliser via sudo, définissez sudo dans l'un des deux modèles suivants.

--Ajoutez le chemin requis vers pyenv à secure_path --Désactivez secure_path pour rendre PATH transparent

Les deux sont très bien, mais choisissez celui qui convient à vos paramètres de sudoers existants. J'aimerais pouvoir utiliser + = pour secure_path ...

#modèle 1: `secure_path`Ajoutez le chemin requis à pyenv

visudo
# secure_Ajoutez les deux suivants au chemin
# - /usr/local/opt/pyenv/shims
# - /usr/local/opt/pyenv/bin

#Changer avant
Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin

#Après le changement
Defaults    secure_path = /usr/local/opt/pyenv/shims:/usr/local/opt/pyenv/bin:/sbin:/bin:/usr/sbin:/usr/bin
#modèle 1: `secure_path`Ajoutez le chemin requis à pyenv(cont'd)

cat << 'EOF' > /etc/sudoers.d/pyenv
Defaults env_keep += "PYENV_ROOT PYENV_VERSION"
EOF
#Motif 2: `secure_path`Pour rendre le PATH transparent

cat << 'EOF' > /etc/sudoers.d/pyenv
Defaults !secure_path
Defaults env_keep += "PATH"

Defaults env_keep += "PYENV_ROOT PYENV_VERSION"
EOF
# (Optional)Paramètres sudo sans mot de passe
#Permet à sudo d'exécuter des commandes liées à pyenv sans mot de passe dans un groupe d'utilisateurs spécifique
#modèle 1,2 Valable dans les deux cas
#Voici un exemple d'utilisation du groupe pyenv

cat << 'EOF' > /etc/sudoers.d/pyenv_nopasswd
Cmnd_Alias PYENV = /usr/local/opt/pyenv/bin/
%pyenv ALL = (ALL) NOPASSWD: PYENV
EOF

Notez que si les sudoers correspondent à plusieurs conditions, le "dernier" prévaudra. https://askubuntu.com/questions/100051/why-is-sudoers-nopasswd-option-not-working/100112#100112

visudo
#Fermer tel quel sans rien changer
#Si tu fais ça/etc/sudoers.d/*Corrige correctement l'autorisation de

misc

Erreur affichée lors de la connexion

pyenv: cannot rehash: /usr/local/opt/pyenv/shims isn't writable

Il s'agit de ʻeval "$ (pyenv init-)" ʻin / etc / profile.d / pyenv.sh où l'utilisateur connecté écrit dans / usr / local / opt / pyenv / shims Je n'ai pas l'autorité. Cela ne fait pas de mal, alors ignorez-le, ou redirigez-le vers / dev / null et supprimez-le si vous êtes curieux.

/etc/profile.d/pyenv.sh


export PYENV_ROOT="/usr/local/opt/pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)" > /dev/null 2>&1

Mettez de la poésie en python 3.4.0

Puisque pip est trop vieux et que «pip install poetry» est de la mousse telle quelle, mettez d'abord à jour la version de pip.

PYENV_VERSION=3.4.0 pip install --upgrade "pip<19.2"
PYENV_VERSION=3.4.0 pip install poetry

Si vous faites accidentellement pip install --upgrade pip sans spécifier la version et qu'un pip qui ne fonctionne pas dans la 3.4.0 est inclus, vous pouvez le récupérer en suivant les étapes ci-dessous.

pyenv shell 3.4.0
rm -Rf /usr/local/opt/pyenv/versions/3.4.0/lib/python3.4/site-packages/pip*
python -m ensurepip
python -m pip uninstall pip
python -m ensurepip

#Renvoyer la coque pyenv
unset PYTHON_VERSION

Après avoir supprimé et réinséré manuellement le pip par défaut avec ensure pip, utilisez à nouveau la commande pip pour se désinstaller puis utilisez ensure pip pour le restaurer. Le premier garantit que pip ne revient pas à l'état où la commande pip peut être exécutée directement.

Recommended Posts

pyenv à l'échelle du système
note de pyenv
mémo pyenv
résumé pyenv
Installez pyenv et rbenv à l'échelle du système sur CentOS
notes d'installation pyenv
pyenv pour linux
pyenv + anaconda + python3
feuille de triche pyenv
pyenv + pyenv-virtualenv (CentOS7)