有时我需要安装一个新的 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 上构建,但所有其他模块都是在安装了上述软件包的情况下构建的。
更新
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 将为configure; make; make install
您下载 Python 版本并应用必要的补丁。
更新结束
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 还需要修改 Modules/_ssl.c 以与 Ubuntu 11.10 中使用的 OpenSSL 1.0 一起使用。在 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
答案1
还有一些。通常,configure 应该会提醒您是否缺少任何内容,其中一些是可选。这是我的列表:
build-essential
libncursesw5-dev
libreadline-gplv2-dev
libssl-dev
libgdbm-dev
libc6-dev
libsqlite3-dev
libbz2-dev
libffi-dev
答案2
你应该能够使用build-dep
下面的选项安装 Python 的所有构建依赖项apt-get
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.
答案3
如果您想使用 Google App Engine SDK:
- openslll
- libssl-dev 构建必需
libsqlite3-dev zlib1g zlib1g-dev
PIL 1.1.7
:)
答案4
要运行某些类型的测试,您需要python-profiler