【发布时间】:2010-11-28 00:14:01
【问题描述】:
我正在编写一个需要在远程服务器上安装 distutils 包的构建脚本。
在 PyPi 上有 2 种方法可以做到这一点 collective.recipe.distutils 0.1 and zerokspot.recipe.distutils 0.1.1.
后一个模块是前一个模块的派生,比第一个更方便一些,但两者都有同样的问题,我现在将描述。
bootstrap.py 执行时,会下载 zc.buildout 包并放入 buildout 的 egg 目录。这使 ./bin/buildout 可以访问 zc.buildout 代码,但 /usr/local/python 目前对 zc.buildout 一无所知。
Buildout 尝试通过在子进程中运行“python setup.py install”来安装包。这会产生 ImportError,因为没有为 /usr/local/python 安装 zc.buildout。
所以,我有几个解决方案。
在远程服务器上使用 easy_install 安装 zc.buildout。我根本不喜欢这个选项,它为一个非常微不足道的模块提供了一种特殊情况。
修改 zerokspot.recipe.distutils 以通过这种方式将 try 块放在“import zc.buildout”周围,即使未安装 zc.buildout 也会安装。这是一个不错的解决方案,但有点老套。
将 subprocess 替换为将使用 distutils api 或 setuptools api 安装包的代码。在我看来,这将是最好的解决方案。
问题是我该怎么做#3?
谢谢你, 塔拉斯
PS:我通过创建另一个不依赖于 zc.buildout 的包解决了这个问题。我的包名为taras.recipe.distutils,可在 pypi 上找到。
【问题讨论】:
-
他的问题是 """ 3. 将 subprocess 替换为将使用 distutils api 或 setuptools api 安装包的代码。在我看来,这将是最好的解决方案。问题是我该怎么做# 3?"""