标签: buildout

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
查看次数

防止使用buildout发生变量替换

是否有一种简单的方法可以在buildout配置中转义用于变量替换的魔术字符,这样就可以保留字符串.换句话说,我说的地方:

[part]
attribute = ${variable}
Run Code Online (Sandbox Code Playgroud)

我实际上并不希望它扩展$ {variable},而是将其保留为文字值.

实际上,我遇到的具体问题不是在buildout配置文件本身,而是在由配方'collective.recipe.template'处理的模板文件中.这使用配置文件中使用的buildout中的相同变量替换引擎.问题是我想用作模板的文件已经将'$ {variable}'语法与最终使用该文件的应用程序配置系统结合使用.

我找到解决问题的唯一方法是使用类似的东西:

[server-xml]
recipe = collective.recipe.template
input = templates/server.xml.in
output = ${product:build-directory}/conf/server.xml
dollar = $
Run Code Online (Sandbox Code Playgroud)

在模板输入文件中,然后有:

${dollar}{variable}
Run Code Online (Sandbox Code Playgroud)

代替:

${variable}
Run Code Online (Sandbox Code Playgroud)

它已经有了.

这样做是因为使用模板对该部分查找'dollar'属性并将其替换为'$'.

而不是必须这样做,有点希望人们可以这样做:

\${variable}
Run Code Online (Sandbox Code Playgroud)

或者甚至是:

$${variable}
Run Code Online (Sandbox Code Playgroud)

并且消除了必须具有虚拟属性以欺骗它做我想要的事情的需要.

查看buildout的源代码,它匹配变量替换的方式似乎不提供转义机制.

如果确实没有办法,那么也许有人知道可以进行变量扩展的另一个构建模板配方,但是它提供了一种表示变量的任何方式的转义机制,这样可以避免可能存在冲突的问题.模板系统扩展机制和模板文件中的文字数据.

python buildout

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

使用buildout安装OpenERP服务器时遇到问题!

我正在尝试使用buildout和我自己的代码来部署OpenERP.事实上,我想构建一个完整的部署结构,允许我将OpenERP与自定义模块和补丁一起使用.

首先,在添加任何个人配置之前,我试图创建一个具有配置所有内容的责任的buildout.

构建配置

我的buildout.cfg配置文件如下所示:

[buildout]
parts = eggs
versions=versions
newest = false
extensions = lovely.buildouthttp
unzip = true
find-links =
       http://download.gna.org/pychart/
[versions]

[eggs]
recipe = zc.recipe.egg
interpreter = python
eggs =
     Paste
     PasteScript
     PasteDeploy
     psycopg2
     PyChart
     pydot
     openerp-server
Run Code Online (Sandbox Code Playgroud)

配置问题

但是当尝试启动buildout时,我在尝试安装最后需要的蛋时会出现一些错误(openerp-server)

在我这边它只是找不到这些模块,但它们在我的蛋目录中:

Error: python module psycopg2 (PostgreSQL module) is required
Error: python module libxslt (libxslt python bindings) is required
Error: python module pychart (pychart module) is required
Error: python module pydot (pydot module) is required
error: Setup script exited with 1 …
Run Code Online (Sandbox Code Playgroud)

python distutils setuptools buildout openerp

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

Buildout忽略了github`find-links`引用

我试图让buildout从我的github帐户使用一个特定的,分叉和调整的包,但它似乎完全忽略了引用,而是选择了标准的PyPi模块.

这是我的buildout配置:

[buildout]
parts = foo
find-links = http://github.com/me/themodule/tarball/version#egg=themodule-version
versions = versions
eggs = ...

[versions]
themodule=version

[foo]
eggs =
    ${buildout:eggs}
    themodule
Run Code Online (Sandbox Code Playgroud)

我正在使用最新zc.buildout的pypi 1.5.2版本.

我已尝试过两者httphttps为链接(因为最近的github更改).链接是活动的并且直接工作,所以我猜它是我的配置.我错过了什么吗?

python github buildout

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

distutils,distutils2,pip和要求

我正在潜入包装Python应用程序的世界,并设法进入这种混乱状态,由于我应该处理的所有概念和选项,我的头开始旋转.

题:

我需要完成什么?从位于git服务器上的源部署我的Python项目.部署工具应该获取并安装所有依赖项,其中大部分都可以通过PIP获得,一个需要通过Git获取和安装.最终结果应该可以通过Pip安装,所以我可以做一些事情:

[~] git clone git://some/path/project.git
[~] pip install project/
Run Code Online (Sandbox Code Playgroud)

上下文: 目前我正在尝试让Distutils2做我想做的事,但似乎使用'generate-setup'命令创建的setup.py不能与Pip一起使用.

我想使用Distutils2,因为它应该是所有人的未来证明.但是关于所有工具的各种文档都是可怕的(准确的信息与过时和不准确的信息混合在一起),这会让一个人质疑他的理智.

所以我该怎么做?坚持distutils和setup.py?或者我需要看一下像Buildout这样的东西?

请问那些善意的回答者请说明我应该使用特定工具做什么(例如:使用Distutils2部署代码,使用PIP安装依赖项,git依赖项编写脚本并将所有内容粘合在一起做XYZ).

编辑:我使用的是Distutils2 1.0a4,它似乎与文档不兼容.

编辑2:重新格式化问题,使我的问题更清楚.

Edit3:这是我打破Python打包和分发工具链的第四次尝试.我不是想让其他人为我做我的工作,但是对于一个新手而言,几乎不可能破解特定工具应该做什么,它开始的地方和另一个结束的地方.特别是因为工具之间的功能重叠.我不是位于硅谷周围的圣人,他们可以让我知道秘密,公开的文件是没有用的.

最终编辑: 虽然在开始这个问题时我并没有考虑用Buildout替换virtualenv.但在做研究的过程中,我意识到了我一直都知道的事情,但我并没有完全清楚地告诉我.有关Python打包和部署自动化的方法有很多种.还有许多工具可以帮助您完成工作.然而,虽然这些工具之间存在显着的功能重叠,但工具链却在不断发展,到目前为止还没有明确的"标准最佳实践".分配工具链军备竞赛仍处于全面激烈状态,尚未出现明显的胜利者.这可能会让我们感到困惑,他们希望Python中的大部分内容都能正常工作.我所追求的(distutils/setuptools + pip + virtualenv以Buildout方式甚至与Buildout半集成)当然是可行的,但它没有多大意义,不是因为它不可能 - 而是因为没有人这样做.如果你需要这种复杂程度,那么你需要提交.就个人而言,我决定将virtualenv抛弃(对于这个项目)并拥抱Buildout.

python distutils pip buildout

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

有没有关于使用buildout和pip的好教程?

我整天都在苦苦挣扎,真正了解如何使用buildout和pip.观看了一堆视频等,但我仍然很难搞清楚做什么和不做扩展和点子.

欢迎提供任何帮助,教程和书籍.

python pip buildout virtualenv

7
推荐指数
1
解决办法
3328
查看次数

如何确保buildout不使用已安装的软件包?

我正在尝试完全切换到buildout - 但我们的开发环境已经安装了很多东西 /usr/lib/pythonxx/

我怎样才能确保buildout不使用系统上已安装的库 - 最终没有virtualenv?

例如 - 如何避免这种行为?:

> cat buildout.cfg
[buildout]
parts = django

[django]
recipe = zc.recipe.egg
eggs = django
interpreter = django

>bin/django 

>>> import django
>>> django
<module 'django' from '/usr/lib/python2.6/site-packages/django/__init__.pyc'>
>>> 
Run Code Online (Sandbox Code Playgroud)

无论如何强制buildout不使用/usr/lib/python2.6中安装的鸡蛋?

python django buildout virtualenv

7
推荐指数
1
解决办法
2372
查看次数

打包为OS X时的请求中的SSLError .app

我正在为OS X开发一个应用程序.该应用程序涉及使用安全连接通过python请求与服务器通信.

我能够运行我打算打包的python文件,并且它通过SSL连接成功.但是,当我用py2app打包文件并尝试运行它时,我收到以下错误:

Traceback (most recent call last):
File "/Users/yossi/Documents/repos/drunken-octo-nemesis/dist/drunken-octo.app/Contents/Resources/__boot__.py", line 338, in <module>
    _run()
File "/Users/yossi/Documents/repos/drunken-octo-nemesis/dist/drunken-octo.app/Contents/Resources/__boot__.py", line 333, in _run
    exec(compile(source, path, 'exec'), globals(), globals())
File "/Users/yossi/Documents/repos/drunken-octo-nemesis/dist/drunken-octo.app/Contents/Resources/media_test.py", line 16, in <module>
    cmpbl.syncWithCloud()
File "src/compare_book_lists.pyc", line 172, in syncWithCloud
File "src/compare_book_lists.pyc", line 64, in checkMediaOnCloud
File "src/get_cloud_book_list.pyc", line 26, in getCloudFulfilledBookList
File "requests/api.pyc", line 55, in get
File "requests/api.pyc", line 44, in request
File "requests/sessions.pyc", line 354, in request
File "requests/sessions.pyc", line 460, in send
File "requests/adapters.pyc", line 250, in …
Run Code Online (Sandbox Code Playgroud)

python macos buildout py2app python-requests

7
推荐指数
1
解决办法
1411
查看次数

你怎么知道哪个python egg在buildout中强制执行约束?

例如,以下内容是使用 bin/buildout -Nvv

...
Getting required 'grokcore.component>=2.5'
  required by five.grok 1.3.2.
  required by grokcore.viewlet 1.11.
Picked: grokcore.component = 2.5
Getting required 'grokcore.annotation'
  required by five.grok 1.3.2.
Picked: grokcore.annotation = 1.3
The constraint, 0.4, is not consistent with the requirement, 'five.localsitemanager>2.0dev'.
While:
  Installing instance.
Error: Bad constraint 0.4 five.localsitemanager>2.0dev
Run Code Online (Sandbox Code Playgroud)

约束five.localsitemanager>2.0dev似乎并没有被grokcore.annotation强制执行(见https://github.com/zopefoundation/grokcore.annotation/blob/master/setup.py),但我怎么找出鸡蛋实际执行呢?

python buildout

7
推荐指数
1
解决办法
224
查看次数

在Plone扩展设置中查找需求规范

我有一个Plone站点(大约4.2.4,从version.txt根目录中的一个说明),我想更新到最新版本(我发现了这个方法)(截至目前4.3.4); 我继承了过多的固定版本,这些版本没有记录,可能已经过时了.

当注释掉我versions.cfg,使用http://dist.plone.org/release/4.3-latest/versions.cfg替代和重新运行buildout-vvv,我得到:

Develop: '.../src/collective.mathjax'
in: '.../src/collective.mathjax'
/tmp/tmpbXsnpD -q develop -mxN -d .../develop-eggs/tmp2yhe9ubuild
...
Installing 'zc.recipe.egg'.
We have the best distribution that satisfies 'zc.recipe.egg<2dev'.
Picked: zc.recipe.egg = 1.3.2
...
There is a version conflict.
We already have: zc.recipe.egg 1.3.2.
While:
  Installing.
  Getting section test.
  Initializing section test.
  Installing recipe zc.recipe.testrunner.
Run Code Online (Sandbox Code Playgroud)

因此似乎有一些要求的子2版本zc.recipe.egg,但我找不到它.(在我versions.cfg看来它是固定的2.0.1- 曾经工作,令人惊讶.)

我搜索了树findgrep,寻找rc.recipe.eggversion*.cfg …

plone buildout plone-4.x

7
推荐指数
1
解决办法
248
查看次数