hil*_*rge 5 python sqlite python-3.x
我正在从源代码构建python(版本3.5)以获取最新版本.我可以makepython并安装它,但几个"可选"模块,包括_sqlite3没有安装:
$>./configure --prefix=/my/prefix && make
Run Code Online (Sandbox Code Playgroud)
产量如下:
...
Python构建成功完成!
找不到构建这些可选模块的必要位:
_bz2 _lzma _sqlite3
_ssl _tkinter readline
要查找必要的位,请在detect_modules()中的setup.py中查找模块的名称.
我(frustratedly)安装从源代码的sqlite3也保证了存在的sqlite3地方发展的文件,我相信我已经设置了必要的lib和include路径按相关LZMA模块安装教程:
$> 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
Run Code Online (Sandbox Code Playgroud)
然而,当我跑步时./configure --prefix=/my/prefix --enable-loadable-sqlite-extensions && make,我得到上述错误_sqlite3(其中包括)未安装,因为找不到必要的位.
基于这个相关的答案,似乎我可能需要改变setup.py?那是对的吗?
有没有比黑客攻击python setup.py脚本更好的方法?
顺便说一句,我认识到,安装sqlite-dev有yum可能解决这个问题,并把相关的sqlite3文件复制到Python安装的地方很明显,但我不肯定,我将能够做到这一点,由于是,由于有限的资源库的访问.
小智 8
这个链接为我构建Python 3.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-devliblzma-dev tk8.5-dev lzma lzma-dev libgdbm-dev
do
apt-get -y install $pkg
done
该setup.py脚本不会检查sqlite3.h文件位置或任何其他相关文件的任何环境变量,因此更改环境变量不足以允许python查找文件,除非将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',
]
Run Code Online (Sandbox Code Playgroud)
由此可见,如果sqlite3未安装在"标准"系统位置(如/ usr或/ usr/local)中,则无法找到头文件.
要解决此问题,请添加/path/to/my/personal/sqlite/include到上面的sqlite_inc_paths数组中:
sqlite_inc_paths = ['/path/to/my/personal/sqlite/include',
...]
Run Code Online (Sandbox Code Playgroud)
并且将找到sqlite模块.
自动安装.要自动执行上述更改,可以使用perl one liner进行上述更改:
$> perl -pi.orig -e "s|(?<=sqlite_inc_paths = )\[|['/path/to/my/personal/sqlite/include',\n|" setup.py
Run Code Online (Sandbox Code Playgroud)
sed也可以使用,但-i就地标志不适用于所有系统.