正确构建本地 python3,支持 bz2

Correctly building local python3, with bz2 support

我正在尝试构建 python3 的本地版本(特别是 python3.7,但与 3.6.6 存在相同的问题),但 运行 遇到 linking 到某些 C 库 and/or headers(至少我认为这是问题所在)。

我能够构建 python3.7,但是 运行 遇到了 bzip2 的问题(但我怀疑会有其他系统库是我遗漏或不知道的)。这在尝试导入各种需要它作为导入错误的 packages/modules 时表现出来:

ModuleNotFoundError: No module named '_bz2'

从这个 Whosebug 问题 - Ask Question - 看来我构建的 python 没有正确的 bz2 headers。 python 构建本身不会失败。

具体问题是如何用bz2搭建本地版本的python?更一般地说,问题是如何正确地 link 到系统库? (因为可能还有其他我没有遇到错误)

就我的尝试而言 - 我发现了这个(陈旧的)问题 - How do you assign bz2 to an altinstall of python? and this more recent question 并根据这些尝试了一些东西。

我 运行 遇到的第一个问题实际上是找到 link 的正确库等(上述问题的解决方案建议设置 CFLAGS="-I/path/to/bz2/include"LDFLAGS="-L/path/to/bz2/lib")。大概这些在我系统的某个地方(ubuntu 16.04),因为 python2.7 和 python3.5 的系统安装与 bzip2 没有问题。

我找到了 libbz2.so.1(以及其他一些)/lib/x86_64-linux-gnu/ - 但文件夹似乎没有遵循上面 example/answer 的模式。因此,我构建了一个新的本地版本的 bz2(在我本地文件夹的 .bzp 中),然后在我尝试构建 python3.7 时尝试 linking 到那个,使用以下:

./configure --prefix=/home/user/.localpython CFLAGS="-I/home/user/.bz2/include" LDFLAGS="-L/home/user/.bz2/lib"

我还尝试了一个更通用的配置(它松散地基于 Compile Python with bz2 support,link 在上面的第二篇文章中提到。)

./configure --prefix=/home/user/.python CFLAGS="-I/usr/local/include" LDFLAGS="-L/usr/local/lib"

(均未成功)

非常感谢任何指点、提示等 - 提前致谢!

默认情况下,

Ubuntu 在编译 Python 时不会安装包含 bz2 支持(或任何其他此类库支持)所需的文件。您需要为库添加 development headers 包。

bz2 Ubuntu 支持,即 libbz2-dev package。您需要为其他功能安装更多此类软件包。

包将 headers 放在一个标准位置,Python configure 脚本知道要找到的位置。您不需要额外的标志。

Python 3.6 build dependencies on Ubuntu 17.10 推断,您还需要:

libbluetooth-dev
libbz2-dev
libdb-dev
libexpat1-dev
libffi-dev
libgdbm-dev
liblzma-dev
libmpdec-dev
libncursesw5-dev
libreadline-dev
libsqlite3-dev
libssl-dev
zlib1g-dev

如果您想支持 Tk GUI 库,tk-devblt-dev