Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python从源代码生成:无法生成可选模块sqlite3_Python_Python 3.x_Sqlite - Fatal编程技术网

python从源代码生成:无法生成可选模块sqlite3

python从源代码生成:无法生成可选模块sqlite3,python,python-3.x,sqlite,Python,Python 3.x,Sqlite,为了获得最新版本,我正在从源代码构建python(3.5版)。我可以makepython并安装它,但几个“可选”模块(包括_sqlite3)没有安装: $>./configure --prefix=/my/prefix && make 结果如下: Python构建成功完成 未找到构建这些可选模块所需的位: _bz2 lzma sqlite3 _ssl\u tkinter读线 要查找必要的位,请在detect_modules()中的setup.py中查找模块名称 我(沮

为了获得最新版本,我正在从源代码构建python(3.5版)。我可以
make
python并安装它,但几个“可选”模块(包括_sqlite3)没有安装:

$>./configure --prefix=/my/prefix && make 
结果如下:

Python构建成功完成

未找到构建这些可选模块所需的位:

_bz2 lzma sqlite3

_ssl\u tkinter读线

要查找必要的位,请在detect_modules()中的setup.py中查找模块名称

我(沮丧地)从源代码处安装了sqlite3,以确保sqlite3开发文件存在于某个地方,我相信我已经根据相关的以下说明设置了必要的
lib
include
路径:

然而,当我运行
/configure--prefix=/my/prefix--enable loadable sqlite extensions&&make
时,我得到了上面的错误,即
\u sqlite3
(以及其他)没有安装,因为找不到必要的位

基于,我似乎需要更改
setup.py
?对吗

真的没有比破解python
setup.py
脚本更好的方法了吗


顺便说一句,我意识到使用
yum
安装
sqlitedev
可能会解决这个问题,并将相关的
sqlite3
文件放在python安装明显的地方,但由于存储库访问受限,我不能肯定我是否能够做到这一点。

脚本未检查任何环境变量以查找
sqlite3.h
文件或任何其他相关文件的位置,因此,改变环境变量不足以让python找到文件,除非
sqlite3dev
包安装到“标准”目录中

以下sqlite3可能的
包含
目录片段取自
setup.py
(对于Python-3.5.0):

因此,很明显,如果sqlite3没有安装在“标准”系统位置,例如/usr或/usr/local,那么将找不到头文件

要解决此问题,请将
/path/To/my/personal/sqlite/include
添加到上述
sqlite\u inc\u path
数组中:

sqlite_inc_paths = ['/path/to/my/personal/sqlite/include',
                   ...]                          
将找到sqlite模块

自动安装。为了自动化上述更改,可以使用perl one liner进行上述更改:

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

$>perl-pi.orig-e“s |(?此链接为我构建Python3.5提供了解决方案。专门针对Ubuntu,但也帮助我在CentOS6中找到了解决方案

更具体地说,对于Ubuntu服务器16.04:

for pkg in build-essential zlib1g-dev libbz2-dev liblzma-dev libncurses5-dev libreadline6-dev libsqlite3-dev libssl-dev libgdbm-dev liblzma-dev tk8.5-dev lzma lzma-dev libgdbm-dev do apt-get -y install $pkg done 对于pkg内置基本zlib1g dev libbz2 dev liblzma dev libncurse5 dev libreadline6 dev libsqlite3 dev libssl dev libgdbm dev liblzma dev tk8.5-dev lzma lzma dev libgdbm dev 做 apt get-y安装$pkg 完成
我认为
tk-dev
应该与
tk8.5-dev
一样工作,但可能适用于更广泛的情况。例如,在MXLinux17上,可用的tk版本是8.6,安装
tk-dev
似乎对我有效。这里不需要For循环,只需执行
apt get-y安装构建要素zlib1g-dev…
并列出所有包。
$> perl -pi.orig -e "s|(?<=sqlite_inc_paths = )\[|['/path/to/my/personal/sqlite/include',\n|" setup.py
for pkg in build-essential zlib1g-dev libbz2-dev liblzma-dev libncurses5-dev libreadline6-dev libsqlite3-dev libssl-dev libgdbm-dev liblzma-dev tk8.5-dev lzma lzma-dev libgdbm-dev do apt-get -y install $pkg done