如何使用distutils的API或setuptools的API来安装的distutils包(How

2019-08-05 21:10发布

我的工作需要远程服务器上安装的distutils包扩建脚本。

PyPI上有2个食谱这样做collective.recipe.distutils 0.1和0.1.1 zerokspot.recipe.distutils 。

后来的模块前的衍生物,是一种更方便一点,然后在第一,但同样的问题,我现在将描述这两个受到影响。

当执行bootstrap.py,它下载zc.buildout包,并把它变成扩建的鸡蛋目录。 这使./bin/buildout访问zc.buildout代码,但在/ usr /本地/ Python不知道在这一点上约zc.buildout什么。

扩建attepts运行“蟒蛇的setup.py安装”子进程内安装的软件包。 这将产生一个ImportError因为zc.buildout没有安装在/ usr /本地/蟒蛇。

所以,我有几个解决方案。

  1. 安装zc.buildout使用easy_install的远程服务器上。 我不喜欢这个选项的话,那让一个特殊情况的模块,这是非常微不足道的。

  2. 修改zerokspot.recipe.distutils把try块围绕“进口zc.buildout”这样一来,它会安装即使未安装zc.buildout。 这是一个好的解决办法,但有点hackish的。

  3. 代码替换子,将安装使用distutils的API或setuptools的API包。 这将是我认为最好的解决方案。

现在的问题是如何将我做#3?

谢谢你,塔拉斯

PS:我通过创建另一个包,不会对zc.buildout扶养解决了这个问题。 我的包被称为taras.recipe.distutils和它的可用PyPI上。

Answer 1:

您可以使用您的Python程序中调用一个命令行程序子模块:

import subprocess
subprocess.call('python setup.py install')

然而,有多少控制你有过的环境,这将安装运行? 如果你正分发包,你将可能有问题,不管别人提出什么样的解决方案。 你将如何处理需要root访问权限(例如sudo的蟒蛇setup.py安装)的情况下?

您可以考虑寻找到摊铺机 ,因为它提供了一个API,是在某些方面的setuptools的延伸。



Answer 2:

zerokspot.recipe.distutils是从根本上打破了它增加了对zc.buildout依赖于它的setup.py,如下所示:

  1. setup.py进口get_versionzerokspot.recipe.distutils
  2. 所有的zerokspot.recipe.distutils在它的定义__init__.py ,包括get_version
  3. __init__.pyzerokspot.recipe.distutils进口zc.buildout

为什么笔者定义get_version是一个谜给我; 最好的做法保持在一个简单的版本字符串setup.py本身并让setuptools的处理开发版本(通过setup.cfg的版本提取元数据),和的distutils。

一般来说是不导入整个包在一个不错的主意setup.py因为这将要求所有的包依赖关系是存在在安装时。 显然,包的作者已经zc.buildout安装为一个站点范围内的包并没有注意到他的监督。

最好的办法是到餐桌的包在GitHub上,除去get_version依赖,而你用你的叉子,而不是提出修改的建议原作者所有。



Answer 3:

你确定你不想只是产生bdist ?



文章来源: How to install distutils packages using distutils api or setuptools api