正确构建带有bz2支持的本地Python3

4
我正在尝试构建本地版本的Python3 (具体来说是Python3.7, 但同样问题也出现在3.6.6上),但在链接到某些C库和/或头文件时遇到问题(至少我认为问题是这个)。
我能够构建Python3.7,但在bzip2方面遇到了问题(但我怀疑还会有其他系统库我缺少并且不知道)。当尝试导入需要bzip2的各种包/模块时,会出现导入错误的情况。
ModuleNotFoundError: No module named '_bz2'

从这个stackoverflow问题 - 问问题 - 看起来我构建的Python没有正确的bz2头文件。Python本身的构建并不失败。
具体问题是如何构建带有bz2的本地版本的Python?更一般地说,问题是如何正确地链接到系统库?(因为可能会有其他我没有遇到错误的库)
就我尝试的内容而言 - 我发现了这个(旧的)问题 - 如何将bz2分配给python的altinstall?和这个较新的问题在Python2中编译bz2支持,并基于这些尝试了一些东西。
我遇到的第一个问题实际上是找到正确的库等进行链接(上面的解决方案建议设置CFLAGS="-I/path/to/bz2/include"LDFLAGS="-L/path/to/bz2/lib")。由于Ubuntu 16.04系统安装的Python2.7和Python3.5没有bzip2问题,因此这些应该在我的系统某处(ubuntu 16.04)。
我在/lib/x86_64-linux-gnu/中找到了libbz2.so.1(和其他一些文件),但是这些文件夹似乎没有遵循上面的示例/答案中的模式。因此,我在我的本地文件夹中构建了一个新的bz2本地版本(在.bzp中),然后尝试使用以下内容链接到它,当我尝试构建Python3.7时:
./configure --prefix=/home/user/.localpython CFLAGS="-I/home/user/.bz2/include" LDFLAGS="-L/home/user/.bz2/lib"

我也尝试了一种更通用的配置(它基本上是基于第二篇文章中链接到的使用bz2支持编译Python。)

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

(两者都没有成功)

任何指针、技巧等都非常感激 - 预先感谢!


1
很希望能够看到失败命令的实际输出。这可以帮助缩小问题范围。 - sophros
构建实际上并没有失败 - 只是没有使用bz2支持进行构建(如果您尝试导入使用它的各种模块,则会显示出来)...将编辑问题。 - djmac
1个回答

9
默认情况下,Ubuntu在编译Python时不会安装包含bz2支持(或任何其他库支持)所需的文件。您需要添加库的“开发头文件”软件包。
对于Ubuntu的支持,可以使用libbz2-dev软件包。您需要为其他功能安装更多的这类软件包。
该软件包将头文件放置在一个标准位置,Python的configure脚本知道如何找到它们。您不需要额外的标志。
Ubuntu 17.10上Python 3.6构建依赖关系推断,您还需要:
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


谢谢 - 这解决了最初的问题(...也许是未来的问题)。我不知道您是否能够说明为什么bz2在系统安装上可以工作(即,在系统python3上导入bz2很好用)? - djmac
1
@djmac:因为系统Python是使用这些头文件编译的。 - Martijn Pieters

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接