Len*_*bro 46 python development compiling
偶尔我需要安装一个新的 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
Run Code Online (Sandbox Code Playgroud)
对于 Python 3.2 及更高版本:
liblzma-dev
Run Code Online (Sandbox Code Playgroud)
更多可选:
tk-dev
libdb-dev
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
其中 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)"
Run Code Online (Sandbox Code Playgroud)
对于 Python 2.6、2.7 和 3.0,您还需要在运行./configure脚本之后和运行make. 在Modules/Setup有这样的行:
#SSL=/usr/local/ssl
#_ssl _ssl.c \
# -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
# -L$(SSL)/lib -lssl -lcrypto
Run Code Online (Sandbox Code Playgroud)
取消注释这些行并将 SSL 变量更改为/usr:
SSL=/usr
_ssl _ssl.c \
-DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
-L$(SSL)/lib -lssl -lcrypto
Run Code Online (Sandbox Code Playgroud)
Python 2.6 和 3.0 还需要修改 Modules/_ssl.c 以与 OpenSSL 1.0 一起使用,后者在 Ubuntu 11.10 中使用。在第 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 */
Run Code Online (Sandbox Code Playgroud)
把它改成:
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 */
Run Code Online (Sandbox Code Playgroud)
这将禁用 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
Run Code Online (Sandbox Code Playgroud)
它需要编译为:
env CPPFLAGS="-I/usr/lib/x86_64-linux-gnu" LDFLAGS="-L/usr/include/x86_64-linux-gnu" ./configure --prefix=/opt/python2.4
Run Code Online (Sandbox Code Playgroud)
Ste*_*zzo 25
还有几个。通常,configure 会提醒您是否缺少任何内容,其中一些是可选的。这是我的清单:
build-essential
libncursesw5-dev
libreadline-gplv2-dev
libssl-dev
libgdbm-dev
libc6-dev
libsqlite3-dev
libbz2-dev
libffi-dev
Run Code Online (Sandbox Code Playgroud)
Mar*_*ppi 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.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
35279 次 |
| 最近记录: |