编译Python 2.7所需的Ubuntu软件包

14

我尝试在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没有提供帮助)


1
我建议尝试进入 Synaptic,搜索 Python 并下载所有的开发工具包等。 - Scott
2
我认为这个问题更适合在unix.se、ubuntu.se、superuser或serverfault上讨论。 - Chris
3个回答

16

假设您已经安装了所有依赖项(在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的tarball并在任何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文件,并制作一个新的tarball。有几个软件包需要我调整LDFLAGS才能正确安装,我还没有进行足够彻底的测试,但到目前为止它可以工作,我正在使用这个Python版本来运行生产应用程序,这些机器上没有预安装所有支持库。


很好的观点,当你构建模块时找不到它,并不意味着你需要它。 - Matthieu Cormier

6

sudo apt-get build-dep python2.6 python-gdbm python-bsddb3(在Maverick上请使用python2.7)。

更多信息,请参见此答案。另外,请查看此页面,同样适用于在Lucid上构建。


我的系统上找不到“build-dep”软件包。 - deamon

6
那些是旧的(大多数已弃用)模块,你可能不会使用。你应该能够安全地忽略这些警告。
你可能需要担心修复的是_bsddb,一旦你安装了Berkeley DB 4.8,它就应该消失了...我不确定它是否在Ubuntu仓库中。(编辑:显然是db packagebsddb185是Oracle Berkley数据库模块的旧版本。据我所知,你可以放心地忽略它。 sunaudiodev已经过时,未经记录,我怀疑你永远不需要使用它。你应该能够安全地忽略它。
希望这能有所帮助...

2
我在Linux上忽略的列表包括_tkinter、bsddb185、dl、imageop和sunaudiodev。 - Michael Dillon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接