我尝试在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没有帮助)
答案 0 :(得分: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构建来在没有预安装所有支持库的计算机上运行生产应用程序。
答案 1 :(得分:6)
sudo apt-get build-dep python2.6 python-gdbm python-bsddb3
(在特立独行时使用python2.7
。
有关详细信息,请参阅this answer。另请参阅this page,这同样适用于在Lucid上建立。
答案 2 :(得分:6)
这些是您可能不会使用的较旧的(主要是折旧的)模块。您应该能够安全地忽略警告。
您可能要担心尝试修复的问题是_bsddb
,一旦安装Berkeley DB 4.8,它就会消失......我不确定它是否在Ubuntu存储库中。 (编辑:显然是db package)
bsddb185
是Oracle Berkley数据库模块的旧版本。据我所知,你可以放心地忽略它。
sunaudiodev
是折旧的,没有证件,我怀疑你无论如何都需要使用它。你应该能够安全地忽略它。
希望这有点帮助,无论如何......