【问题标题】:Ubuntu packages needed to compile Python 2.7编译 Python 2.7 所需的 Ubuntu 软件包
【发布时间】:2011-04-18 07:19:37
【问题描述】:

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

【问题讨论】:

  • 我会尝试进入 Synaptic 并搜索 Python 并下载所有开发工具包等。
  • 我认为这对于 unix.se、ubuntu.se、超级用户或服务器故障会更好。

标签: python ubuntu packages ubuntu-10.04


【解决方案1】:

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

有关详细信息,请参阅this answer。另请查看this page,它同样适用于在 Lucid 上构建。

【讨论】:

  • 在我的系统上找不到包“build-dep”。
【解决方案2】:

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

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

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

sunaudiodev 已被折旧,未记录,我怀疑您无论如何都需要使用它。您应该可以放心地忽略它。

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

【讨论】:

  • 我在 Linux 上的忽略列表是 _tkinter、bsddb185、dl、imageop、sunaudiodev
【解决方案3】:

假设你已经安装了所有的依赖项(在 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 构建来运行生产未预装所有支持库的计算机上的应用程序。

【讨论】:

  • 很好的一点是,在构建时找不到模块并不意味着您需要它。
猜你喜欢
  • 1970-01-01
  • 2017-01-06
  • 1970-01-01
  • 2012-06-20
  • 1970-01-01
  • 2014-11-12
  • 1970-01-01
  • 2015-10-10
  • 1970-01-01
相关资源
最近更新 更多