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 没有帮助)

4

3 回答 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 构建在机器上运行生产应用程序没有预装所有支持库。

于 2011-06-17T19:05:35.340 回答
6

sudo apt-get build-dep python2.6 python-gdbm python-bsddb3(用于python2.7特立独行)。

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

于 2010-09-28T13:39:25.683 回答
6

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

您可能要担心尝试修复的是_bsddb,一旦您安装了 Berkeley DB 4.8,它就会消失...我不确定它是否在 Ubuntu 存储库中。(编辑:显然它是db 包

bsddb185是 Oracle Berkley 数据库模块的旧版本。据我所知,您可以放心地忽略它。

sunaudiodev已折旧,无证,我怀疑您无论如何都需要使用它。您应该可以安全地忽略它。

无论如何,希望对您有所帮助...

于 2010-09-28T13:41:38.157 回答