从源代码编译 Python 之前我应该​​安装哪些包/库?

从源代码编译 Python 之前我应该​​安装哪些包/库?

有时我需要安装一个新的 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 音频硬件的软件包(原因很明显),因此bsddb185sunaudiodev模块仍然无法在 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

相关内容