我正在开发一个构建脚本,它需要在远程服务器上安装distutils包。
在PyPi上,有两种方法可以实现这个collective.recipe.distutils 0.1和zerokspot.recipe.distutils 0.1.1。
后一个模块是前者的衍生物,比第一个模块更方便一些,但两者都存在相同的问题,我现在将对此进行描述。
执行bootstrap.py时,它会下载zc.buildout包并将其放入buildout的鸡蛋目录中。这使得./bin/buildout可以访问zc.buildout代码,但是/usr/local/python目前对zc.buildout一无所知。
通过在子进程中运行'python setup.py install‘来构建安装包的程序集。这会产生一个ImportError,因为没有为/usr/ zc.buildout /python安装zc.buildout。
所以,我有几个解决办法。
问题是我会怎么做#3?
谢谢你,塔拉斯
PS:我通过创建另一个不依赖zc.buildout的包来解决这个问题。我的包名为taras.recipe.distutils,可在pypi上使用。
发布于 2009-09-14 04:12:12
您可以使用子过程模块调用Python程序中的命令行程序:
import subprocess
subprocess.call('python setup.py install')但是,您对将运行此安装的环境有多少控制?如果它是您正在分发的包,那么无论人们提出什么解决方案,您都可能会遇到问题。您将如何处理需要根访问的情况(例如sudo python setup.py安装)?
您可以考虑查看摊铺机,因为它提供了在某些方面是setuptools的扩展的API。
发布于 2009-09-14 08:40:23
zerokspot.recipe.distutils的根本缺陷在于它在它的setup.py中添加了对zc.buildout的依赖,如下所示:
setup.py从zerokspot.recipe.distutils导入get_versionzerokspot.recipe.distutils都是在它的__init__.py中定义的,包括get_version__init__.py in zerokspot.recipe.distutils imports zc.buildout作者为什么定义get_version对我来说是个谜;最佳实践在setup.py本身中保留一个简单的版本字符串,让setuptools处理开发版本(通过setup.cfg)和distutils来提取版本元数据。
通常,在setup.py中导入整个包并不是一个好主意,因为这需要在安装时出现所有包依赖项。显然,这个包的作者已经将zc.buildout安装为一个站点范围的包,并且没有注意到他的疏忽。
最好的选择是在github上对包进行分叉,删除get_version依赖项,并在使用fork时向原始作者提议更改。
发布于 2009-09-14 02:45:42
你确定你不想只生成一个bdist
https://stackoverflow.com/questions/1419379
复制相似问题