正确构建具有bz2支持的本地python3

时间:2018-07-03 07:50:02

标签: python python-3.x bzip2 ldflags cflags

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

我能够构建python3.7,但是bzip2遇到了问题(但是我怀疑还会缺少其他我不知道的系统库)。尝试导入需要将其作为导入错误的各种程序包/模块时,这会表现出来:

ModuleNotFoundError: No module named '_bz2'

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

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

就我尝试过的内容而言-我发现了这个(古老的)问题- How do you assign bz2 to an altinstall of python?和这个最近的问题Compiling bz2 support in python2,并根据这些问题尝试了一些方法。

我遇到的第一个问题实际上是找到正确的库等进行链接(上述问题的解决方案建议设置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/)-但是这些文件夹似乎没有遵循上述示例/答案的模式。这样,我构建了一个新的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"

(均不成功)

任何指针,技巧等都将不胜感激-预先感谢!

1 个答案:

答案 0 :(得分:1)

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

对于Ubuntu上的bz2支持,就是libbz2-dev package。您需要为其他功能安装更多此类软件包。

该软件包将标头放置在标准位置,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