如何从virtualenv迁移到buildout?
我正在尝试把一个项目从 virtualenv
转移到 buildout
,但我觉得我还没完全理解 buildout
的概念。我找到的所有教程都是在讲如何把 buildout
和 Zope
一起使用,但我并没有用 Zope
,所以我不知道该怎么继续。
我在 virtualenv
下的文件结构如下:
myapp/
app.py
这个项目是通过 /path/to/venvs/myapp/bin/python /path/to/myapp/script.py
来运行的。
而在 buildout
下,我的文件结构是:
myapp/
app.py
bootstrap.py
buildout.cfg
运行 python bootstrap.py
和 bin/buildout
后,我得到了这些额外的文件:
myapp/
bin/
buildout
eggs/
setuptools-0.6c12dev_r80622-py2.6.egg
tornado-1.0.1-py2.6.egg
parts/
现在我不太确定怎么“运行”我的应用。
有没有建议?
3 个回答
在我们的项目中,我们也没有使用Zope。我们花时间为学生写了一份介绍,教他们如何使用zc.buildout
和标准的Python打包工具来组织(并通过PyPI发布)他们的代码。也许对阅读这个讨论的人会有帮助:http://www.idiap.ch/software/bob/docs/releases/v1.2.2/sphinx/html/OrganizeYourCode.html
Buildout 和 virtualenv 其实是有点关系的。Buildout 主要是用来把软件部署到一个受限制和可控的环境中,而 virtualenv 则是用来封装 Python 软件运行的环境。Buildout 在内部实现了 virtualenv 的功能,并在此基础上增加了一些其他的东西。
可以把 buildout 想象成一个食谱,它告诉你如何将你的代码放到一个远程系统上,以便可以运行。这个过程的一部分是创建一个干净的沙盒(这正是 virtualenv 可以提供的)——然后根据需要添加库、组件和其他部分。
我不是 buildout 的专家,但我想你的 Python 主代码应该会出现在你目录结构中的 "bin" 文件夹下,然后你会从那里以某种方式调用它。
下面这个步骤会把tornado安装成一个“蛋”(egg),并在bin目录下创建一个python和myapp的脚本,这样就能正确找到tornado这个“蛋”了。
[buildout]
parts = python
eggs = tornado
extra-paths = ${buildout:directory}
[python]
recipe = zc.recipe.egg
interpreter = python
eggs = ${buildout:eggs}
entry-points = myapp=app:main
extra-paths = ${buildout:extra-paths}