Beste Möglichkeit, Python 3.7 unter Ubuntu 16.04 auszuführen, das mit Python 3.5 geliefert wird

17

Ich möchte Backports vermeiden, sie scheinen meine Pakete immer durcheinander zu bringen.

Also dachte ich mir Tools wie conda / virtualenv / vielleicht kann sogar docker helfen. Was ist die einfachste und sauberste Art, mit Python 3.7 auf meinem System zu arbeiten?

benji
quelle
1
Schauen Sie in Pyenv
Naftuli Kay

Antworten:

33

Dies sollte Sie mit Python 3.7 unter Ubuntu 16.04 zum Laufen bringen

# Install requirements
sudo apt-get install -y build-essential \
checkinstall \
libreadline-gplv2-dev \
libncursesw5-dev \
libssl-dev \
libsqlite3-dev \
tk-dev \
libgdbm-dev \
libc6-dev \
libbz2-dev \
zlib1g-dev \
openssl \
libffi-dev \
python3-dev \
python3-setuptools \
wget

# Prepare to build
mkdir /tmp/Python37
cd /tmp/Python37

# Pull down Python 3.7, build, and install
wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tar.xz
tar xvf Python-3.7.0.tar.xz
cd /tmp/Python37/Python-3.7.0
./configure
sudo make altinstall

Dann würden Sie Python einfach so aufrufen:

python3.7 ./yourScript.py

Dies ist ein Screenshot mehrerer Versionen von Python, die gleichzeitig in einem Docker-Container vorhanden sind, und wie sie unterschieden werden können:

So rufen Sie Python in verschiedenen Versionen auf

Pip sollte auch mit dieser Installation installiert worden sein. Verwenden Sie dieses Format, um Pakete zu installieren:

pip3.7 --version
Sn3akyP3t3
quelle
1
Das wirkt wie ein Zauber. Ich konnte python3.7 installieren. Die einzige Einschränkung ist die Verwendung von sudo make altinstall, da der Verzeichniszugriff nicht für den normalen Benutzer bestimmt war. alle apt-get wurden ebenfalls mit sudo installiert. Vielen Dank für das Teilen der Informationen.
Doogle
Die akzeptierte Antwort hat mit einer Einschränkung gut funktioniert. Ich musste apt install libffi-devauch den folgenden Fehler im altinstall-Schritt (Ubuntu 16.04 LTS) vermeiden:python ModuleNotFoundError: No module named '_ctypes'
moshisushi
@moshisushi Ich bin auch auf dieses Problem gestoßen, als ich an einer Lösung arbeitete. Aus diesem Grund habe ich libffi-dev bereits in die Erstinstallation aufgenommen.
Sn3akyP3t3
1
@Doogle Präfixbefehle mit sudo, wo erforderlich. Vielen Dank für den Hinweis. Diese Schritte wurden aus meinen Docker-Container-Build-Schritten übernommen, bei denen Root-Benutzer angenommen wurden.
Sn3akyP3t3
2

Ich würde nicht empfehlen, manuell mit Quellcode-Installationen und Pfaden herumzuspielen. Nutzen Siepyenv und sparen Sie sich die Mühe.

Alles was du tun musst, ist:

  • Führen Sie das pyenvInstallationsprogramm aus
  • Folge den Anweisungen
  • Installieren Sie die benötigten Python-Versionen
  • Wählen Sie aus, welche Python-Version Sie für ein bestimmtes Verzeichnis oder global verwenden möchten

Um beispielsweise 3.7 zu installieren, überprüfen Sie, welche Versionen verfügbar sind:

pyenv install -l | grep 3.7

Dann renne:

pyenv install 3.7.1

Nun können Sie Ihre Python-Version auswählen:

pyenv global 3.7.1

Dies wechselt pythonzu 3.7.1. Wenn Sie das System Python möchten, führen Sie Folgendes aus:

pyenv global system

Führen Sie Folgendes aus, um zu überprüfen, welche Python-Versionen verfügbar sind pyenv versions.

slhck
quelle
0

Sie können den Quellcode von www.python.org herunterladen, kompilieren und aus dem Quellcode erstellen und dann entweder:

1) Stellen Sie den Pfad zu den ausführbaren Python-Dateien PATHund den Bibliotheken voran LD_LIBRARY_PATH.

2) Mach was ich getan habe und kompiliere und baue es aus dem Quellcode und mache Symlinks zu den ausführbaren Dateien in /usr/bin. Sie können es aufrufen python37, um es von dem zu unterscheiden, python 3.5das bereits installiert ist.

Die erste Methode verwendet es standardmäßig in Ihrer Umgebung, während Sie es bei der zweiten Methode mit dem Befehl angeben müssen, den Sie für den Symlink verwendet haben. Möglicherweise möchten Sie die zweite Methode zuerst verwenden, bevor Sie sie zur Standardmethode machen, da sie python 3.7sich noch in der Entwicklung befindet.

Nasir Riley
quelle