たまに新しい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オーディオハードウェアもありません。したがって、bsddb185
およびsunaudiodev
モジュールはUbuntu上に構築されませんが、他のすべてのモジュール上記のパッケージがインストールされた状態でビルドされます。
UPDATE
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
を適用します。
END UPDATE
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
スクリプトを実行した後、make
を実行する前に、SSLを明示的に有効にする必要があります。 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
さらにいくつかあります。通常、configureは何かが足りない場合に通知し、それらのいくつかはareオプションです。私のリストは次のとおりです。
build-essential
libncursesw5-dev
libreadline-gplv2-dev
libssl-dev
libgdbm-dev
libc6-dev
libsqlite3-dev
libbz2-dev
libffi-dev
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.
google App Engine SDKを使用する場合:
libsqlite3-dev zlib1g zlib1g-dev
PIL 1.1.7
:)
特定のタイプのテストを実行するには、python-profiler
が必要です