Python 3.6+: ModuleNotFoundError: No module named ‚_cffi_backend‘

Wer aus gewissen Gründen ein Python 3 z.B. wie ich von 3.5 auf 3.6 „upgraden“ musste und mittels update-alternatives dann auch Python 3.6 nutzt, stößt u.a. bei Certbot unter Debian 9 (Stretch) auf ein kleines Problem. Bei der Ausführung von certbot, kommt es bei fehlerhafter Konfiguration zur Fehlerausgabe ModuleNotFoundError: No module named '_cffi_backend'.

Verlinken von Python 3.6 Site Packages zu Pypthon 3.5 Dist-Packages

Eine Möglichkeit ist, im Ordner /usr/local/lib/python3.6/site-packages/ einen Symbollink mittels ln -s /usr/lib/python3/dist-packages/_cffi_backend.cpython-35m-x86_64-linux-gnu.so _cffi_backend.cpython-36m-x86_64-linux-gnu.so zu machen – vorausgesetzt, das Paket python3-cffi ist installiert. Allerdings ist Certbot schlau und meckert einen dann an, dass die installierte Version (bei mir 0.28.0) für Python 3.5 kompiliert wurde. Man setzt also hier einen Python 3.6 Symbollink auf eine Python 3.5 Datei.

Die Abhilfe

Sollte Python 3.5 weiterhin installiert sein, muss einfach nur die Certbot Datei angepasst werden.

Kleiner Hinweis am Rande: Ich musste, damit gewisse Programme auch wirklich Python 3.6 nutzen können (scheint bei Debian 9 irgendwie bissl scheps zu sein), musste ich /usr/bin/python3 auf /etc/alternatives/python3 verlinken, damit es auch wirklich die in den Alternativen angewählte Python-Version nutzt.

Damit Certbot weiterhin mit Python 3.5 ausgeführt wird, muss mittels nano /usr/bin/certbot die 1. Zeile des Dateikopfes wie folgt angepasst werden:

Von

#!/usr/bin/python3

zu

#!/usr/bin/python3.5

Es gibt sicher sauberere Lösungen, doch für Debian gibt es keine gesonderte PPA wie für Ubuntu und Snap wollte bzw. will ich nicht installieren. Von Certbot wird nämlich die Installation über Snap empfohlen. Zwar zeigt Certbot noch andere alternative Installationen auf, allerdings funktioniert es auch so und sollte keine Nachteile bringen.

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.