Nachdem ich heute eine Code Challenge erhalten hatte, waren einige Dinge an meinem Arbeitsrechner auf den neuesten Stand zu bringen, bevor ich daran denken konnte, diese zu bearbeiten. Das lief allerdings nicht ganz so straightforward ab, wie man sich das eigentlich wünscht. Daher hier eine Beschreibung der Installation, vielleicht hilft's dem einen oder anderen ja weiter.

Welche Debian-Version war das gerade noch mal?

cat /etc/debian_version
	9.4

Und welche Version von OpenSSL habe ich hier?

openssl version
	OpenSSL 1.1.0j  20 Nov 2018 (Library: OpenSSL 1.1.1b  26 Feb 2019)

Aber in der OpenSSL-Version aus dem Debian-Paketsystem fehlen offensichtlich Teile, die beim Kompilieren des Python-Moduls ssl gebraucht werden. Daher wird erstmal das neueste Release von OpenSSL selber kompiliert:

cd ~/src && mkdir openssl && cd openssl
wget https://www.openssl.org/source/openssl-1.1.1b.tar.gz
tar xvf openssl-1.1.1b.tar.gz && cd openssl-1.1.1b
./config shared
make

Achtung! Im Gegensatz zu dem, was im Web auch zu lesen steht, soll man hier kein make install machen! Das braucht man hier nicht, zerschießt sich aber gegebenfalls erstens die vorhandene Installation von OpenSSL aus den Paketquellen und gerät zweitens später beim Installieren von Python schwerst in die Bredouille!

Eine weitere Hürde, die erst erkannt werden muß, ist die, daß das Makefile von Python 3.7.2 OpenSSL-Libraries an einer Stelle sucht, die es nicht gibt. Also wird das folgendermaßen hingebogen:

mkdir ~/src/openssl/openssl-1.1.1b/lib
cp ~/src/openssl/openssl-1.1.1b/*.{so,so.1.1,a,pc} ~/src/openssl/openssl-1.1.1b/lib

Damit die anderen Python-Module ebenfalls korrekt gebaut werden können, werden vermutlich noch ein paar zusätzliche Header benötigt. Dies kann natürlich variieren, je nachdem, was ihr auf eurem System schon zuvor alles kompiliert habt:

sudo apt-get install libffi-dev libsqlite3-dev

Nun kommt Python selbst zum Zuge:

cd ~/src && mkdir python && cd python
wget https://www.python.org/ftp/python/3.7.2/Python-3.7.2.tgz
tar xvf Python-3.7.2.tgz && cd Python-3.7.2
./configure --with-openssl=/home/user/src/openssl/openssl-1.1.1b --enable-optimizations
make
sudo make altinstall

Man beachte hier auch das sudo make altinstall, das dafür sorgt, daß die im System bereits vorhandenen Python-Binaries nicht gegebenenfalls überschrieben werden!

Ging alles gut?

python3.7
	Python 3.7.2 (default, Mar 24 2019, 17:40:39)
	[GCC 6.3.0 20170516] on linux
	Type "help", "copyright", "credits" or "license" for more information.
	>>> import ssl
	>>> ssl.OPENSSL_VERSION
	'OpenSSL 1.1.1b  26 Feb 2019'

Die Code Challenge bekommt natürlich eine eigene Virtualenv:

mkvirtualenv code-challenge-venv --no-site-packages --python=python3.7
workon code-challenge-venv

Und in der wird nun das neueste Release von Django installiert:

pip install Django==2.1.7
python
	Python 3.7.2 (default, Mar 24 2019, 17:40:39)
	[GCC 6.3.0 20170516] on linux
	Type "help", "copyright", "credits" or "license" for more information.
	>>> import django
	>>> django.VERSION
	(2, 1, 7, 'final', 0)
  • Teilen