标签: buildout

使用RPM分发python包以及模块依赖项

我有几个python应用程序包含应该打包并部署为RPM的脚本/模块.

更棘手的是每个应用程序应该与所有python模块依赖项一起分发,并且这些应该优先于系统安装的任何应用程序使用.

其中一些RPM的目标主机具有有限的网络访问权限,因此RPM应包含运行应用程序所需的所有内容,而不是在部署时下载任何内容.

我已经看过包装和分发virtualenv,但重新定位virtualenv似乎并没有得到很好的支持.

我查看了zc.buildout,但发现文档缺乏.我可以看到如何在开发期间下载依赖项,而不是如何将它们作为更大的应用程序的一部分进行分发.不同的应用程序可能需要同一模块的不同版本,因此不应在系统范围内安装这些版本.

另一个痛点是应用程序中的任何python脚本都需要修改为在开发期间和部署后使用不同的sys.path,我无法看到明显的方法.

有关如何最好地实现这一点的建议吗?从开发人员的角度来看,工作流程的理想总结如下所示:

  1. 下载应用程序源
  2. 运行脚本以获取特定模块依赖项(如果不存在)(可能使用pip)
  3. 运行脚本来构建python应用程序,并将它和所有下载的依赖项打包到RPM中

然后,最终的RPM应该可以在没有网络访问权限的主机上安装和运行,并且只安装了python解释器.

python packaging rpm buildout virtualenv

12
推荐指数
1
解决办法
5430
查看次数

对于django,Buildout vs virtualenv + pip?

优点和缺点?

我个人正在为我的django项目使用buildout,但考虑到简单地切换到virtualenv + pip.

python django pip buildout virtualenv

11
推荐指数
1
解决办法
2417
查看次数

zc.buildout停止工作:ImportError:没有名为apport.fileutils的模块

我一直在使用buildout很长一段时间没有任何问题,事实上我昨天没有任何问题.

但是今天我的所有项目都无法扩建.我尝试了两个不同的Ubuntu工作站,结果相同.

这是我得到的错误:

Initializing zc.buildout
Debug: Downloading http://pypi.python.org/packages/2.7/s/setuptools/setuptools-0.6c11-py2.7.egg
Traceback (most recent call last):
  File "bootstrap.py", line 259, in <module>
    import zc.buildout.buildout
  File "/tmp/tmpNkVMXW/zc.buildout-2.0.0-py2.7.egg/zc/buildout/buildout.py", line 18, in <module>
    import zc.buildout.easy_install
  File "/tmp/tmpNkVMXW/zc.buildout-2.0.0-py2.7.egg/zc/buildout/easy_install.py", line 59, in <module>
    pkg_resources.Requirement.parse('distribute')
AttributeError: 'NoneType' object has no attribute 'location'
Error in sys.excepthook:
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/apport_python_hook.py", line 66, in apport_excepthook
    from apport.fileutils import likely_packaged, get_recent_crashes
ImportError: No module named apport.fileutils

Original exception was:
Traceback (most recent call last):
  File "bootstrap.py", line 259, in …
Run Code Online (Sandbox Code Playgroud)

python buildout

11
推荐指数
1
解决办法
6972
查看次数

如何从virtualenv迁移到buildout?

我正试图将项目从中移动virtualenvbuildout,但我不认为我已经掌握了整个概念buildout.我发现的所有教程都buildout在使用它的上下文中讨论Zope,我没有使用它,因此无法看到如何继续.

我的文件结构virtualenv如下:

myapp/
  app.py
Run Code Online (Sandbox Code Playgroud)

哪个是运行使用/path/to/venvs/myapp/bin/python /path/to/myapp/script.py.

有了buildout,我的文件结构是:

myapp/
  app.py
  bootstrap.py
  buildout.cfg
Run Code Online (Sandbox Code Playgroud)

运行python bootstrap.pybin/buildout给我这些额外的文件:

myapp/
  bin/
    buildout
  eggs/
    setuptools-0.6c12dev_r80622-py2.6.egg
    tornado-1.0.1-py2.6.egg
  parts/
Run Code Online (Sandbox Code Playgroud)

在这一点上,我不确定如何"运行"我的应用程序.

建议吗?

python buildout virtualenv

10
推荐指数
1
解决办法
1276
查看次数

如何配置buildout以使用bin/sphinxbuilder创建sphinx文档

在我的buildout.cfg文件中,我有这样的代码:

parts =
    ...
    sphinxbuilder
Run Code Online (Sandbox Code Playgroud)

下一个在同一档案中:

eggs=
   ...
   jinja2
   markupsafe
   sphinx
Run Code Online (Sandbox Code Playgroud)

然后,在文件的末尾:

[sphinxbuilder]
recipe = collective.recipe.sphinxbuilder
source = ${buildout:directory}/docs-src
build = ${buildout:directory}/docs
Run Code Online (Sandbox Code Playgroud)

我做:

bin/buildout
Run Code Online (Sandbox Code Playgroud)

它给出了输出(通常:OK):

Updating sphinxbuilder.
collective.recipe.sphinxbuilder: writing MAKEFILE..
collective.recipe.sphinxbuilder: writing BATCHFILE..
collective.recipe.sphinxbuilder: writing custom sphinx-builder script..
Run Code Online (Sandbox Code Playgroud)

在鸡蛋文件夹中我有Sphinxeeg.

之后buildout,在项目目录下我有一个新目录:docs.然后我运行命令:

bin/sphinx-quickstart
Run Code Online (Sandbox Code Playgroud)

就像root path for the documentation我设定的那样docs

然后我编辑docs/conf.py并取消注释

sys.path.insert(0, os.path.abspath('.'))
Run Code Online (Sandbox Code Playgroud)

我运行命令bin/sphinxbuilder并得到错误:

Makefile:12: *** The 'sphinx-build' command was not found. 
Make sure you have Sphinx installed, then …
Run Code Online (Sandbox Code Playgroud)

python buildout python-sphinx

10
推荐指数
1
解决办法
607
查看次数

为什么要在扩建内部建立监督?

我已经看到了建扩建食谱监督员进入扩建,我想控制里面的守护进程.但是,在我看来,在/etc/init.d(例如)中仍然需要在启动时运行所述管理程序实例.

那么,为什么要在buildout中构建主管呢?为什么不在系统范围内安装它,只为内部涉及的守护进程创建一个配置文件?

python buildout supervisord

9
推荐指数
1
解决办法
734
查看次数

Buildout尝试更新系统范围的Distribute安装并拒绝运行

Buildout不喜欢我的系统范围的Distribute安装并拒绝运行:

plone@s15447224:~/mybuildout$ python bootstrap.py 
Creating directory '/home/plone/mybuildout/bin'.
Creating directory '/home/plone/mybuildout/parts'.
Creating directory '/home/plone/mybuildout/eggs'.
Creating directory '/home/plone/mybuildout/develop-eggs'.
Getting distribution for 'distribute==0.6.14'.
Before install bootstrap.
Scanning installed packages
Setuptools installation detected at /usr/lib/python2.6/dist-packages
Non-egg installation
Removing elements out of the way...
Already patched.
/usr/lib/python2.6/dist-packages/setuptools.egg-info already patched.
After install bootstrap.
Creating /usr/local/lib/python2.6/dist-packages/setuptools-0.6c11-py2.6.egg-info
error: /usr/local/lib/python2.6/dist-packages/setuptools-0.6c11-py2.6.egg-info: Permission denied
An error occurred when trying to install distribute 0.6.14. Look above this message for any errors that were output by easy_install.
While:
  Bootstrapping.
  Getting distribution for 'distribute==0.6.14'. …
Run Code Online (Sandbox Code Playgroud)

python buildout

9
推荐指数
1
解决办法
1808
查看次数

如何在我的plone产品中从buildout获取配置?

如何在Plone产品中包含Buildout的配置信息?

我正在研究的plone产品之一是从文件系统读取和写入信息.它目前在egg命名空间内执行(例如在plone/product /目录中),但这对我来说并不合适.

我的想法是配置一个位置来存储可配置路径中的信息,就像iw.fss和iw.recipe.fss一样.

例如,将该信息保存到$ {buildout:directory}/var/mydata.

zope plone buildout

9
推荐指数
1
解决办法
890
查看次数

Python代码组织问题:鸡蛋+软件包+构建+单元测试+ SVN

我有几个共享常见模块的python项目.到现在为止,我已经......咳嗽......保留公共代码的多个副本并手动同步.但我显然更愿意做别的事情.

它现在在我看来,好像zc.Buildout可能是我需要的.我想我应该做的是将我系统的每个可重用组件放入一个单独的egg中,然后使用buildout将它们组装到项目中.

我也在想,对于任何特定的模块,我应该将单元测试放入一个单独的包或蛋中,这样我就不会在每个项目中安装组件的单元测试副本.我只想在我的库开发的地方进行单元测试,而不是在刚刚使用的地方.

所以也许我想要这样的东西

projects
  lib1
    tests
    code
  lib2
    tests
    code
  app1
    tests 
    appcode
  app2
    tests
    appcode
Run Code Online (Sandbox Code Playgroud)

等等

app1和app2都是独立的应用程序,有自己的代码和测试,但也包括和使用lib1和lib2.和lib1/test,lib1/code,lib2/test,lib2code,app1,app2是分开的鸡蛋.这听起来不错吗?

但是,我现在感到困惑.我假设当我开发app1时,我希望buildout将lib1,lib2和app1的副本放到一个单独的工作目录中,而不是直接将这些库的副本放在app1下.但是,这如何与我的SVN源代码控制一起使用?如果使用buildout动态构造工作目录,它不能是一个实时SVN目录,我可以从中检查更改回存储库?

我是否误解了如何使用buildout?我会更好地采用完全不同的方法吗?如何在项目之间混合源代码控制和模块重用?

更新:感谢两位目前已回答此问题的人.我正在尝试更多这个.

python svn egg code-organization buildout

8
推荐指数
2
解决办法
2313
查看次数

开源真正的django项目

我正在努力学习Django.并且需要一些东西超越Hello world和Polls教程.你能否推荐任何用Django编写的真实项目?试图搜索,但发现并不多.特别感兴趣的是buildout的用法.

django open-source buildout

8
推荐指数
1
解决办法
2041
查看次数