4

我正在尝试构建 python3 的本地版本(特别是 python3.7,但与 3.6.6 相同的问题),但是在链接到一些 C 库和/或头文件时遇到了问题(至少这是我认为的问题是)。

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

ModuleNotFoundError: No module named '_bz2'

从这个 stackoverflow 问题 - Ask Question - 看来我已经构建了没有正确 bz2 标头的 python。python 构建本身不会失败。

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

就我所尝试的而言 - 我发现了这个(旧的)问题 - 你如何将 bz2 分配给 python 的 altinstall?还有这个最近的问题Compiling bz2 support in python2并尝试了一些基于这些的东西。

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

我发现libbz2.so.1(以及其他一些)/lib/x86_64-linux-gnu/-但文件夹似乎没有遵循上面示例/答案的模式。因此,我构建了 bz2 的新本地版本(.bzp在我的本地文件夹中),然后在尝试构建 python3.7 时尝试链接到该版本,使用以下命令:

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

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

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

(这两个都不成功)

非常感谢任何指针、提示等 - 在此先感谢!

4

1 回答 1

9

默认情况下,Ubuntu 在编译 Python 时不会安装包含 bz2 支持(或任何其他此类库支持)所需的文件。您需要为库添加开发头文件包。

对于bz2Ubuntu 的支持,这就是libbz2-devpackage。您需要为其他功能安装更多此类软件包。

该包将标头放在标准位置,Pythonconfigure脚本知道可以找到该位置。您不需要额外的标志。

Python 3.6 构建依赖于 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-dev并且blt-dev.

于 2018-07-07T16:31:16.243 回答