ソースからPythonをコンパイルする前にインストールすべきパッケージ/ライブラリは何ですか?


44

たまに新しいUbuntuをインストールする必要があり(デスクトップとサーバーの両方に使用しました)、コンパイルする前にインストールしていたはずのいくつかのライブラリを忘れてしまいます。つまり、再コンパイルする必要があり、面倒です。

そこで、Pythonをコンパイルする前にインストールするすべてのライブラリパッケージの完全なリストを作成したいと思います(できればオプションであることが望ましい)。

これは、以下のヘルプで掘り下げて作成したリストsetup.pyです。少なくともUbuntu 10.04および11.04で完全です:

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

Python 3.2以降の場合:

liblzma-dev

よりオプション:

tk-dev
libdb-dev

Ubuntuには、Berkeleyデータベースのv1.8.5用のパッケージも(明らかな理由で)Sunオーディオハードウェアもありません。したがって、Ubuntuでモジュールbsddb185sunaudiodevモジュールはビルドされませんが、他のすべてのモジュールは上記のパッケージがインストールされてビルドされます。

更新

Ubuntu 14.04には、Python 2.6や2.7などに必要なさらに多くのパッチがあります。代わりにpyenvをチェックアウトすることをお勧めします。スクリプトが含まれていますpython-build(にありますplugins/python-build/bin)。これを使用すると、次のような任意のPythonバージョンをインストールできます。

$ ./python-build 2.7.8 /opt/python27

ここで、2.7.8はバージョンで、/ opt / python27はインストールされるパスです。PyenvはPythonバージョンをダウンロードし、必要なパッチを適用configure; make; make installします。

更新を終了

Python 2.5およびPython 2.6では、Ubuntu 11.04以降でLDFLAGSを設定して、新しいマルチアーチレイアウトを処理する必要もあります。

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

Python 2.6、2.7、および3.0では、./configureスクリプトの実行後、実行前にSSLを明示的に有効にする必要もありますmake。次のModules/Setupような行があります:

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

これらの行のコメントを解除し、SSL変数を/usr次のように変更します。

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

Python 2.6および3.0には、Ubuntu 11.10で使用されているOpenSSL 1.0で使用されるように修正されたModules / _ssl.cも必要です。300行目付近にこれがあります。

    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 */

それを次のように変更します。

    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 */

これにより、SSL_v2サポートが無効になりますが、これは明らかにOpenSSL1.0ではなくなっています。

Python 2.4(はい、2.4を必要とする古いプロジェクトがまだいくつかあります)は、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

そして、次のものでコンパイルする必要があります。

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

回答:


22

さらにいくつかあります。通常、configureは不足しているものがあるかどうかを通知し、そのうちのいくつかオプションです。私のリストは次のとおりです。

build-essential
libncursesw5-dev
libreadline-gplv2-dev
libssl-dev
libgdbm-dev
libc6-dev
libsqlite3-dev
libbz2-dev
libffi-dev

1
ありがとう、更新しました。Configureはあなたに思い出させますが、それはただシューッという音で、時々どのパッケージをインストールするのかが明らかではありません。
レナートレゲブロ

実際に回答しているのは1人だけです。:)次にUbuntuをインストールする必要があるときに、この質問に追加することを忘れないでください。:)
レナート・レゲブロ

1
Ubuntu 12.04の場合、変更libreadline5-devする必要がありますlibreadline-dev
Ehtesh Choudhury 14

3
最近では、libbz2-devとliblzma-devも追加する必要があります。
アパララ

2
16.10は次のように置き換えられlibreadline5-devましたlibreadline-gplv2-dev
-jmunsch

15

apt-getのbuild-depオプションを使用して、Pythonのすべてのビルド依存関係をインストールできるはずです。

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.

1
それは面白い。ただし、明らかに厳密に必要ではないもの(libsgmls-perl !?)をインストールしますが、libz-devもlibreadline-devもインストールしません(上記参照)。
レナートレゲブロ

ただし、これは非常に便利ですapt-get source python
ステファノパラッツォ

1
私にとっては、これはopensslも省略しています。つまり、pythonをビルドした後、インストーラーがhttps経由でダウンロードするため、setuptoolsをインストールできません。
ジョナサンハートリー14年

これは公式ドキュメントでも推奨されているようです:docs.python.org/devguide/setup.html
hwjp

1
精度を高めるには、コマンドを使用できますsudo apt-get build-dep python3.x(必要に応じて3とxをお好みのバージョンに置き換えます-場合によっては3.6がまだ利用できなかったため、代わりに3.5を使用しました)
-JxAxMxIxN


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.