我正在尝试构建本地版本的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"
(均不成功)
任何指针,技巧等都将不胜感激-预先感谢!
答案 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-dev
和blt-dev
。