Python 如何强制构建使用已安装的软件包

Python 如何强制构建使用已安装的软件包,python,buildout,Python,Buildout,在服务器上,为了优化磁盘,我们不安装C编译器, 问题是: 我想用buildout 2.3.1安装“spur”python包, spur正在使用pycrypto,这需要C编译器 为了避免编译,我在服务器(Suse 11SP2)上安装了rpm python pycrypto(python-pycrypto-2.6-31.7.x86_64.rpm)。我可以通过“pip冻结”检查pycrypto是否已安装: pip freeze lxml==2.1.2 mod-python==3.3.1 Numer

在服务器上,为了优化磁盘,我们不安装C编译器, 问题是:

我想用buildout 2.3.1安装“spur”python包, spur正在使用pycrypto,这需要C编译器

为了避免编译,我在服务器(Suse 11SP2)上安装了rpm python pycrypto(python-pycrypto-2.6-31.7.x86_64.rpm)。我可以通过“pip冻结”检查pycrypto是否已安装:

pip freeze 

lxml==2.1.2
mod-python==3.3.1
Numeric==24.2
numpy==1.3.0
pycrypto==2.6
pywbem==0.7.0
PyXML==0.8.4
然而,当我开始构建时,它仍然尝试使用不存在的C编译器构建pycrypto

因此,我在buildout.cfg中添加了include site packages=true和允许的来自site packages=pycrypto的鸡蛋,但没有考虑它们。 我还试着做了一个:

python bootstrap.py --allow-site-packages
bin/buildout
但这也无济于事

如何避免编译已经从rpm编译和安装的包

这是buildout.cfg

[buildout]
newest = false
extensions = gp.vcsdevelop
develop-dir = src
parts = eggs tests wsgi
include-site-packages = true
allowed-eggs-from-site-packages = pycrypto

eggs =
    Django==1.4.8
    ordereddict
    ipython==0.13.2
    django-webtest
    django-grappelli<2.5.0
    django-bootstrap3-datetimepicker
    z3c.recipe.usercrontab
    rrdgraphs
    south
    achilterm
    pynag
    pyaml<14
    DjangoDevKit==1.0.3
    Sphinx
    xlwt
    xlrd
    spur

...
[buildout]
最新=错误
扩展=gp.vcsdevelop
开发目录=src
零件=鸡蛋测试wsgi
include site packages=true
允许来自站点包的鸡蛋=pycrypto
蛋=
Django==1.4.8
有序的
ipython==0.13.2
django网络测试

django grappelli我没有证据表明zc.buildout>1.7.1支持
包含站点包
,也没有
允许站点包中的鸡蛋

在我的本地机器上,我在以下版本的zc.buildout中搜索了上述功能:

  • zc.buildout-1.4.4-py2.7.egg
  • zc.buildout-1.6.3-py2.7.egg
  • zc.buildout-1.7.1-py2.7.egg
  • zc.buildout-2.0.0-py2.7.egg
  • zc.buildout-2.0.1-py2.7.egg
  • zc.buildout-2.1.0-py2.7.egg
  • zc.buildout-2.2.0-py2.7.egg
  • zc.buildout-2.2.1-py2.7.egg
  • zc.buildout-2.2.3-py2.7.egg
  • zc.buildout-2.2.4-py2.7.egg
  • zc.buildout-2.2.5-py2.7.egg
  • zc.buildout-2.3.0-py2.7.egg
  • zc.buildout-2.3.1-py2.7.egg
查看自述。这些特性是在zc.buildout 1.5.0中介绍的。支持这些功能的最新版本是1.7.1

他们用zc.BuildOut2.0.0重新启动了一些程序

引用changlog 2.0.0版:

这是一个向后不兼容的buildout版本,它试图纠正buildout 1中的错误

Buildout不再试图提供与系统Python安装的完全或部分隔离。如果您想要隔离,可以将buildout与virtualenv一起使用,或者首先使用干净的Python构建

在您的情况下,这意味着,如果要使用这些功能,您需要使用
zc.buildout 1.7.1

同样重要的是,不可能同时使用这两个选项。使用
站点软件包中允许的鸡蛋(仅特定软件包)
,或
包括站点软件包

我假设您使用的是boostrap.py版本1:

此版本不支持´--allow site packages´选项,因为它打算与处理此情况(或至少1.5.x)的zc.buildout 1.x一起使用


好吧,在经历了构建历史的短暂旅程之后,我想以下两点将解决您的问题:

  • 请确保您使用的是boostrap.py 2:。只有此版本支持
    --allow site packages
    选项
  • 确保您正在为yout boostrap.py verson使用合适的zc.buildout版本
然后
python bootstrap.py--允许站点包按预期工作。

我找到了一个解决方法:

我刚刚创建了一个egg链接文件到developmenteggs目录:

$ cat develop-eggs/pycrypto.egg-link 
/usr/lib64/python2.6/site-packages

您正在使用哪个zc.buildout?检查输出的第一行:
未使用的构建选项:“站点包中允许的鸡蛋”包括站点包。
似乎无法识别这些选项。我已经使用了最新的引导并重新安装了构建,该版本是2.3.1,应该管理选项“允许从站点包生成鸡蛋”“包含-site-packages”。问题是“python bootstrap.py…”实际上正在安装最新的构建版本。我不想手动安装旧的,因为我可能出于其他原因需要最新的。这是鸡蛋鸡的问题。是的,“python bootstrap.py--allow site packages”正在安装buildout 2.3.1
$ cat develop-eggs/pycrypto.egg-link 
/usr/lib64/python2.6/site-packages