从源代码编译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音频硬件,因此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将下载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还需要修改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

Answers:


22

还有更多。通常,configure会提醒您是否缺少任何内容,其中一些可选的。这是我的清单:

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

1
谢谢,更新。Configure确实会提醒您,但它只是一闪而过,有时不清楚要安装哪个软件包。
Lennart Regebro

被认为是唯一实际回答的人。:)下一次我需要安装Ubuntu时,我会尽量记住添加到该问题。:)
Lennart Regebro 2011年

1
对于Ubuntu 12.04,您需要更改libreadline5-devlibreadline-dev
Ehtesh Choudhury 2014年

3
最近,还应该添加libbz2-dev和liblzma-dev。
阿帕拉2014年

2
16.10已替换libreadline5-devlibreadline-gplv2-dev
jmunsch'1

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(请参见上文)。
Lennart Regebro 2011年

但是,这在您使用时非常有用apt-get source python
Stefano Palazzo

1
对我来说,这也省略了openssl,这意味着在我构建python之后,我无法安装setuptools,因为它的安装程序是通过https下载的。
乔纳森·哈特利

这也是官方文档似乎也建议的内容:docs.python.org/devguide/setup.html
hwjp

1
为了获得更高的精度,您可以使用命令sudo apt-get build-dep python3.x(根据需要用您的首选版本替换3和x-尽管有时在我的情况下3.6尚不可用,所以我改用3.5)
JxAxMxIxN

2

如果您想使用Google App Engine SDK:

  • OpenSell
  • libssl-dev构建必备

libsqlite3-dev zlib1g zlib1g-dev

PIL 1.1.7

:)


您不需要PIL来编译Python。:)
Lennart Regebro 2011年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.