python从源代码生成:无法生成可选模块sqlite3
为了获得最新版本,我正在从源代码构建python(3.5版)。我可以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中查找模块名称 我(沮
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
?对吗
真的没有比破解pythonsetup.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