Welche Pakete / Bibliotheken sollte ich installieren, bevor ich Python aus dem Quellcode kompiliere?

44

Hin und wieder muss ich ein neues Ubuntu installieren (ich habe es sowohl für den Desktop als auch für die Server verwendet) und vergesse immer ein paar Bibliotheken, die ich vor dem Kompilieren hätte installieren sollen, was bedeutet, dass ich neu kompilieren muss und es nervt.

Jetzt möchte ich eine vollständige Liste aller zu installierenden Bibliothekspakete erstellen, bevor Python kompiliert wird (und am besten, wie optional sie sind).

Dies ist die Liste, die ich mit der folgenden Hilfe und durch Eingraben zusammengestellt habe setup.py. Es ist mindestens für Ubuntu 10.04 und 11.04 vollständig:

build-essential (obviously)
libz-dev        (also pretty common and essential)
libreadline-dev (or the Python prompt is crap)
libncursesw5-dev
libssl-dev
libgdbm-dev
libsqlite3-dev
libbz2-dev

Für Python 3.2 und höher:

liblzma-dev

Mehr optional:

tk-dev
libdb-dev

Ubuntu hat keine Pakete für v1.8.5 der Berkeley - Datenbank, noch (aus offensichtlichen Gründen) die Sun Audio - Hardware, so dass die bsddb185und sunaudiodevModule immer noch nicht auf Ubuntu gebaut werden, sondern auch alle anderen Module sind mit den oben genannten Pakete installiert gebaut.

AKTUALISIEREN

In Ubuntu 14.04 werden noch mehr Patches für Python 2.6 und 2.7 usw. benötigt. Ich würde empfehlen, stattdessen pyenv auszuprobieren . Es enthält ein Skript python-build(befindet sich in plugins/python-build/bin). Damit können Sie beliebige Python-Versionen wie folgt installieren:

$ ./python-build 2.7.8 /opt/python27

Wobei 2.7.8 die Version ist und / opt / python27 der Pfad, unter dem es installiert wird. Pyenv lädt die Python-Version herunter und wendet die erforderlichen Patches configure; make; make installfür Sie an.

END UPDATE

Für Python 2.5 und Python 2.6 muss außerdem LDFLAGS unter Ubuntu 11.04 und höher festgelegt sein, damit das neue Layout mit mehreren Archiven verwendet werden kann:

export LDFLAGS="-L/usr/lib/$(dpkg-architecture -qDEB_HOST_MULTIARCH)"

Für Python 2.6, 2.7 und 3.0 müssen Sie SSL nach dem Ausführen des ./configureSkripts und vor dem Ausführen explizit aktivieren make. Darin Modules/Setupgibt es Zeilen wie diese:

#SSL=/usr/local/ssl
#_ssl _ssl.c \
#       -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
#       -L$(SSL)/lib -lssl -lcrypto

Kommentieren Sie diese Zeilen aus und ändern Sie die SSL-Variable in /usr:

SSL=/usr
_ssl _ssl.c \
       -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
       -L$(SSL)/lib -lssl -lcrypto

Für Python 2.6 und 3.0 muss auch Modules / _ssl.c geändert werden, damit es mit OpenSSL 1.0 verwendet werden kann, das in Ubuntu 11.10 verwendet wird. Um die Linie 300 finden Sie Folgendes:

    else if (proto_version == PY_SSL_VERSION_SSL3)
        self->ctx = SSL_CTX_new(SSLv3_method()); /* Set up context */
    else if (proto_version == PY_SSL_VERSION_SSL2)
        self->ctx = SSL_CTX_new(SSLv2_method()); /* Set up context */
    else if (proto_version == PY_SSL_VERSION_SSL23)
        self->ctx = SSL_CTX_new(SSLv23_method()); /* Set up context */

Ändern Sie das in:

    else if (proto_version == PY_SSL_VERSION_SSL3)
        self->ctx = SSL_CTX_new(SSLv3_method()); /* Set up context */
#ifndef OPENSSL_NO_SSL2
    else if (proto_version == PY_SSL_VERSION_SSL2)
        self->ctx = SSL_CTX_new(SSLv2_method()); /* Set up context */
#endif
    else if (proto_version == PY_SSL_VERSION_SSL23)
        self->ctx = SSL_CTX_new(SSLv23_method()); /* Set up context */

Dies deaktiviert die SSL_v2-Unterstützung, die anscheinend in OpenSSL1.0 weg ist.

Python 2.4 (ja, ich habe noch einige alte Projekte, die 2.4 benötigen) benötigt diesen Patch für setup.py:

--- setup.py    2006-10-08 19:41:25.000000000 +0200
+++ setup.py        2012-05-08 14:02:14.325174357 +0200
@@ -269,6 +269,7 @@
         lib_dirs = self.compiler.library_dirs + [
             '/lib64', '/usr/lib64',
             '/lib', '/usr/lib',
+           '/usr/lib/x86_64-linux-gnu'
             ]
         inc_dirs = self.compiler.include_dirs + ['/usr/include']
         exts = []
@@ -496,7 +497,8 @@
                 ssl_incs += krb5_h
         ssl_libs = find_library_file(self.compiler, 'ssl',lib_dirs,
                                      ['/usr/local/ssl/lib',
-                                      '/usr/contrib/ssl/lib/'
+                                      '/usr/contrib/ssl/lib/',
+                                     'x86_64-linux-gnu'
                                      ] )

         if (ssl_incs is not None and

Und es muss kompiliert werden mit:

env CPPFLAGS="-I/usr/lib/x86_64-linux-gnu" LDFLAGS="-L/usr/include/x86_64-linux-gnu"  ./configure --prefix=/opt/python2.4
Lennart Regebro
quelle

Antworten:

22

Es gibt noch ein paar mehr. Normalerweise sollte configure Sie daran erinnern, wenn etwas fehlt, und einige davon sind optional. Hier ist meine Liste:

build-essential
libncursesw5-dev
libreadline-gplv2-dev
libssl-dev
libgdbm-dev
libc6-dev
libsqlite3-dev
libbz2-dev
libffi-dev
Stefano Palazzo
quelle
1
Danke, aktualisiert. Configure erinnert Sie daran, aber es rauscht nur so dahin, und manchmal ist nicht klar, welches Paket installiert werden soll.
Lennart Regebro
Akzeptiert als die einzige, die tatsächlich antwortet. :) Ich werde versuchen, mich daran zu erinnern, diese Frage das nächste Mal hinzuzufügen, wenn ich ein Ubuntu installieren muss. :)
Lennart Regebro
1
Für Ubuntu 12.04 solltest du libreadline5-devlibreadline-dev
Ehtesh Choudhury
3
In jüngerer Zeit sollten auch libbz2-dev und liblzma-dev hinzugefügt werden.
Apalala
2
16.10 hat ersetzt libreadline5-devdurchlibreadline-gplv2-dev
jmunsch
15

Sie sollten in der Lage sein, alle Build-Abhängigkeiten für Python mit der build-depOption in apt-get zu installieren

sudo apt-get build-dep python

    build-dep
       build-dep causes apt-get to install/remove packages in an attempt
       to satisfy the build dependencies for a source package.
Marco Ceppi
quelle
1
Das ist interessant. Aber es installiert eine Menge Dinge, die eindeutig nicht unbedingt benötigt werden (libsgmls-perl !?), während es weder libz-dev noch libreadline-dev (so) installiert.
Lennart Regebro
Dies ist jedoch sehr nützlich, wenn Sie apt-get source python.
Stefano Palazzo
1
Bei mir wird auch openssl weggelassen, was bedeutet, dass ich setuptools nicht installieren kann, nachdem ich Python erstellt habe, da das Installationsprogramm über https heruntergeladen wird.
Jonathan Hartley
Dies ist, was die offiziellen Dokumente ebenfalls zu empfehlen scheinen: docs.python.org/devguide/setup.html
hwjp
1
Für eine höhere Genauigkeit können Sie den Befehl verwenden sudo apt-get build-dep python3.x(ersetzen Sie 3 und x nach Bedarf durch Ihre bevorzugte Version - obwohl manchmal, wie in meinem Fall 3.6 noch nicht verfügbar war, stattdessen 3.5 verwendet wurde)
JxAxMxIxN
2

Wenn Sie das Google App Engine SDK verwenden möchten:

  • opensll
  • libssl-dev build-essential

libsqlite3-dev zlib1g zlib1g-dev

PIL 1.1.7

:)

Fabjoa
quelle
Sie brauchen kein PIL, um Python zu kompilieren. :)
Lennart Regebro
1

Um bestimmte Arten von Tests durchzuführen, benötigen Sie python-profiler

Claytron
quelle