编译Python 2.7所需的Ubuntu包

2024-04-26 11:52:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在Ubuntu10.4上编译Python2.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没有帮助)


Tags: thetoinpybuildmodules消息make
3条回答

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

有关详细信息,请参见this answer。也可以看看this page,它同样适用于在Lucid上构建。

这些是旧的(大部分是折旧的)模块,您可能不会使用。您应该能够安全地忽略这些警告。

您可能需要担心的是_bsddb,一旦安装了Berkeley DB 4.8。。。我不确定它是否在Ubuntu的repos中。(编辑:显然是db package

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

在生成过程中不生成的模块只有:

_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。有几个包需要我花点时间来正确安装它们,我还没有做足够的全面测试,但是到目前为止它仍然可以工作,我正在使用这个Python构建在没有预先安装所有支持库的机器上运行生产应用程序。

相关问题 更多 >