2015-09-25 99 views
0

我从源代码构建python(版本3.5)以获取最新版本。我可以make Python和安装它,但几个 “可选” 的模块,包括_sqlite3不安装:python从源代码构建:无法构建可选模块sqlite3

$>./configure --prefix=/my/prefix && make 

产生如下:

...

Python构建成功完成!

必要的位来构建这些可选模块均未发现:

_bz2 _lzma _sqlite3

_ssl _tkinter的readline

要找到所需的位,看在setup.py在detect_modules()为该模块的名称。

我(frustratedly)从源代码也安装sqlite3的,以确保地方存在sqlite3的开发文件,我相信我已经设置了必要的libinclude路径按相关lzma module install tutorial

$> find/-name libsqlite3.so 
/home/username/myproject/lib/libsqlite3.so 

$> find/-name sqlite3.h 
/home/username/myproject/include/sqlite3.h 

$> echo $LD_LIBRARY_PATH 
/home/username/myproject/lib 

$> echo $LDFLAGS 
-L/home/username/myproject/lib 

$> echo $CFLAGS 
-I/home/username/myproject/include 

然而,当我运行./configure --prefix=/my/prefix --enable-loadable-sqlite-extensions && make时,我得到上面的错误,_sqlite3(其中包括)没有安装,因为找不到必要的位。

根据this related answer,看来我可能需要更改setup.py?那是对的吗?

难道真的没有比剽窃python setup.py脚本更好的方法吗?

顺便说一句,我认识到,与yum安装sqlite-dev可以解决这个问题,并把相关的sqlite3文件到Python安装的地方很明显,但我不肯定,我将能够做到这一点,由于是,由于限制资源库访问。

回答

2

setup.py脚本不检查任何环境变量来sqlite3.h文件或任何其他相关文件的位置,并因此改变环境变量的不足,让蟒蛇找到文件,除非sqlite3-dev软件包都安装了“标准“目录。

的可能include目录为sqlite3的下面的代码片断是从setup.py取(对于Python-3.5.0):

sqlite_inc_paths = ['/usr/include', 
        '/usr/include/sqlite', 
        '/usr/include/sqlite3', 
        '/usr/local/include', 
        '/usr/local/include/sqlite', 
        '/usr/local/include/sqlite3', 
        ] 

从这一点,其清楚,如果sqlite3的没有被安装在一个“标准”系统位置,例如/ usr或/ usr/local,那么头文件将不会被找到。

为了解决这个问题,加入/path/to/my/personal/sqlite/include到上述sqlite_inc_paths阵列:

sqlite_inc_paths = ['/path/to/my/personal/sqlite/include', 
        ...]       

和SQLite模块会被发现。

自动安装。为了自动操作的变化,一个Perl一个衬垫可以用来作出上述变化:

$> perl -pi.orig -e "s|(?<=sqlite_inc_paths =)\[|['/path/to/my/personal/sqlite/include',\n|" setup.py 

sed也可以使用,但-i就地标志不能在所有系统上运行。

2

此链接为我构建Python 3.5提供了解决方案。特别针对Ubuntu,但也帮助了解了CentOS6。

Install missing packages before compiling Python3

更具体的Ubuntu服务器16.04:

 

for pkg in build-essential zlib1g-dev libbz2-dev liblzma-dev libncurses5-dev libreadline6-dev libsqlite3-dev libssl-dev libgdbm-devliblzma-dev tk8.5-dev lzma lzma-dev libgdbm-dev 
do 
    apt-get -y install $pkg 
done 
+0

我想'TK-dev'应该工作一样'tk8.5-dev',但可以适用于更广泛的案例。例如,在MXLinux 17上,可用的tk版本是8.6,并且安装'tk-dev'似乎为我工作。 – bli