Führen Sie unten alle als root aus.
#Fügen Sie die Pakete hinzu, die zum Erstellen von Python erforderlich sind
# 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
#Versionsspezifikation
cd /usr/local/opt/pyenv
git log --oneline --decorate --tags
#Das Tag, das oben steht, ist das neueste
git checkout v1.2.18
#Wenn Sie später überprüfen, welche Version
# git log --oneline --decorate --tags
#Um zu sehen, mit welchem Tag der HEAD übereinstimmt
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
#Setzen Sie die gewünschte Python
pyenv install 3.6.10
Wenn Sie es über sudo verwenden möchten, stellen Sie sudo in einem der beiden folgenden Muster ein.
secure_path
, um PATH transparent zu machenBeides ist in Ordnung, aber wählen Sie diejenige, die Ihren vorhandenen Sudoer-Einstellungen entspricht. Ich wünschte, ich könnte + =
für Secure_path verwenden ...
#Muster 1: `secure_path`Fügen Sie den erforderlichen Pfad zu pyenv hinzu
visudo
# secure_Fügen Sie dem Pfad die folgenden zwei hinzu
# - /usr/local/opt/pyenv/shims
# - /usr/local/opt/pyenv/bin
#Vorher ändern
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
#Nach der veränderung
Defaults secure_path = /usr/local/opt/pyenv/shims:/usr/local/opt/pyenv/bin:/sbin:/bin:/usr/sbin:/usr/bin
#Muster 1: `secure_path`Fügen Sie den erforderlichen Pfad zu pyenv hinzu(cont'd)
cat << 'EOF' > /etc/sudoers.d/pyenv
Defaults env_keep += "PYENV_ROOT PYENV_VERSION"
EOF
#Muster 2: `secure_path`Um den Pfad transparent zu machen
cat << 'EOF' > /etc/sudoers.d/pyenv
Defaults !secure_path
Defaults env_keep += "PATH"
Defaults env_keep += "PYENV_ROOT PYENV_VERSION"
EOF
# (Optional)Passwortlose Sudo-Einstellungen
#Ermöglicht sudo, pyenv-bezogene Befehle ohne Kennwort in einer bestimmten Benutzergruppe auszuführen
#Muster 1,2 In beiden Fällen gültig
#Das Folgende ist ein Beispiel für die Verwendung der Pyenv-Gruppe
cat << 'EOF' > /etc/sudoers.d/pyenv_nopasswd
Cmnd_Alias PYENV = /usr/local/opt/pyenv/bin/
%pyenv ALL = (ALL) NOPASSWD: PYENV
EOF
Beachten Sie, dass, wenn Sudoer mehreren Bedingungen entsprechen, die "letzte" Vorrang hat. https://askubuntu.com/questions/100051/why-is-sudoers-nopasswd-option-not-working/100112#100112
visudo
#Schließen wie es ist, ohne etwas zu ändern
#Wenn du das tust/etc/sudoers.d/*Korrigiert die Erlaubnis von
misc
pyenv: cannot rehash: /usr/local/opt/pyenv/shims isn't writable
Dies ist der "eval" $ (pyenv init-) "- Teil von" / etc / profile.d / pyenv.sh ", den der angemeldete Benutzer in" / usr / local / opt / pyenv / shims "schreibt Ich habe nicht die Autorität. Es tut nicht weh, also ignoriere es einfach oder leite es zu / dev / null
um und lass es fallen, wenn du neugierig bist.
/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
Da Pip zu alt ist und "Pip Install Poetry" Moos ist, aktualisieren Sie zuerst die Version von Pip.
PYENV_VERSION=3.4.0 pip install --upgrade "pip<19.2"
PYENV_VERSION=3.4.0 pip install poetry
Wenn Sie versehentlich "pip install --upgrade pip" ausführen, ohne die Version anzugeben, und ein Pip enthalten ist, der in 3.4.0 nicht funktioniert, können Sie ihn wiederherstellen, indem Sie die folgenden Schritte ausführen.
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
#Pyenv-Schale zurückgeben
unset PYTHON_VERSION
Verwenden Sie nach dem manuellen Löschen und erneuten Einfügen des Standard-Pip mit verify pip den Befehl pip erneut, um sich selbst zu deinstallieren, und stellen Sie ihn dann mithilfe von sure pip wieder her. Der erste stellt sicher, dass pip nicht in den Zustand zurückkehrt, in dem der Befehl pip
direkt getroffen werden kann.