我正在开发一个需要在远程服务器上安装 distutils 包的构建脚本。
在 PyPi 上,有 2 种方法可以完成此功能, collective.recipe.distutils 0.1 和 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 上找到。