编译Python 2.7所需的Ubuntu软件包
我在Ubuntu 10.4上尝试编译Python 2.7,但在运行make
之后收到了以下错误信息:
Python build finished, but the necessary bits to build these modules were not found:
_bsddb bsddb185 sunaudiodev
To find the necessary bits, look in setup.py in detect_modules() for the module's name.
我需要安装哪些软件包呢?(setup.py没有提供帮助)
3 个回答
这些都是比较旧的模块(大部分已经不再推荐使用),你可能用不到。你可以放心地忽略这些警告。
不过,有一个你可能需要关注一下的,就是 _bsddb
,这个问题在你安装 Berkeley DB 4.8 后应该就会解决……我不太确定它是否在 Ubuntu 的软件库里。(编辑:显然它是 db 包)
bsddb185
是 Oracle Berkley 数据库模块的旧版本。根据我所知,你可以放心地忽略它。
sunaudiodev
已经不推荐使用了,而且没有文档,我怀疑你会需要用到它。你可以放心地忽略它。
希望这些信息能对你有所帮助……
假设你已经安装了所有需要的依赖(在Ubuntu上,这可能需要安装一些东西,比如 sudo apt-get install libdb4.8-dev
和其他各种 -dev 包),那么我就来告诉你我是怎么构建Python的。
tar zxvf Python-2.7.1.tgz
cd Python-2.7.1
# 64 bit self-contained build in /opt
export TARG=/opt/python272
export CC="gcc -m64"
export LDFLAGS='-Wl,-rpath,\$${ORIGIN}/../lib -Wl,-rpath-link,\$${ORIGIN}/../lib -Wl,--enable-new-dtags'
./configure --prefix=$TARG --with-dbmliborder=bdb:gdbm --enable-shared --enable-ipv6
make
make install
在使用make命令构建时,唯一不会被构建的模块是:
_tkinter - I don't do GUI apps and would use wxWindows if I did
bsddb185 - horribly obsolete version of bdb
dl - deprecated in 2.6
imageop - deprecated in 2.6
sunaudiodev - obsolete interface to some SparcStation device I think
接下来,我会收集所有不在Python安装目录中的 .so 文件,并把它们复制过去:
# collect binary libraries ##REDO THIS IF YOU ADD ANY ADDITIONAL MODULES##
cd /opt/python272
find . -name '*.so' | sed 's/^/ldd -v /' >elffiles
echo "ldd -v bin/python" >>elffiles
chmod +x elffiles
./elffiles | sed 's/.*=> //;s/ .*//;/:$/d;s/^ *//' | sort -u | sed 's/.*/cp -L & lib/' >lddinfo
# mkdir lib
chmod +x lddinfo
./lddinfo
然后为了保险起见,我还会添加setuptools。
#set the path
export PATH=/opt/python272/bin:$PATH
#install setuptools
./setuptools-0.6c11-py2.7.egg
到这个时候,我可以把 /opt/python272 打包成一个tar包,然后在任何64位的Linux系统上运行,即使是那些没有安装任何依赖的精简版系统,或者是一些旧版的系统,它们的依赖版本也比较老。
我还会安装 pip
,不过在这过程中我的笔记有些空白,因为我在使用virtualenv时遇到了一些麻烦。基本上,virtualenv不支持这种情况。大概我执行了 easy_install pip
,然后:
export LD_RUN_PATH=\$${ORIGIN}/../lib
pip install cython
pip install {a whole bunch of other libraries that I expect to use}
在我安装完模块后,我会回过头来重新运行收集 .so 文件的命令,并制作一个新的tar包。有几个包我需要调整 LDFLAGS
才能正确安装,虽然我还没有进行足够的测试,但到目前为止,这个Python构建可以在没有预先安装所有支持库的机器上运行生产应用。