Python 如何使用distutils api或setuptools api安装distutils包
我正在编写一个构建脚本,需要在远程服务器上安装distutils包 在PyPi上,有两种方法可以做到这一点 后一个模块是前一个模块的派生,比前一个模块更方便,但两者都有相同的问题,我现在将描述 执行bootstrap.py时,它下载zc.buildout包并将其放入buildout的eggs目录。这使得./bin/buildout可以访问zc.buildout代码,但是/usr/local/python此时对zc.buildout一无所知 Buildout试图通过在子流程内部运行“python setup.py install”来安装包。这会产生ImportError,因为没有为/usr/local/python安装zc.buildout 因此,我有几个解决方案Python 如何使用distutils api或setuptools api安装distutils包,python,distutils,buildout,Python,Distutils,Buildout,我正在编写一个构建脚本,需要在远程服务器上安装distutils包 在PyPi上,有两种方法可以做到这一点 后一个模块是前一个模块的派生,比前一个模块更方便,但两者都有相同的问题,我现在将描述 执行bootstrap.py时,它下载zc.buildout包并将其放入buildout的eggs目录。这使得./bin/buildout可以访问zc.buildout代码,但是/usr/local/python此时对zc.buildout一无所知 Buildout试图通过在子流程内部运行“python
PS:我通过创建另一个不依赖于zc.buildout的包解决了这个问题。我的程序包被调用,可在pypi上使用。您确定不只是生成一个命令行程序吗?您可以使用以下模块在Python程序中调用命令行程序: 但是,您对运行此安装的环境有多大的控制权?如果您正在分发一个包,那么无论人们提出什么解决方案,您都可能会遇到问题。您将如何处理需要root访问权限的情况(例如sudo python setup.py安装)
你可以考虑一下,因为它提供了一种API,它在某种程度上是StudioToots的扩展。 < Pr.ZeNoSk.Ray.diditul基本上被打破了,因为它在Studio.Py中添加了对ZC.BudidUd的依赖性,如下:
setup.py
从zerokspot.recipe.distutils
zerokspot.recipe.distutils
都在它的\uuuu init\uuuuu.py
中定义,包括get\u version
zerokspot.recipe.distutils中的导入zc.buildout
get\u version
对我来说是个谜;最佳实践在setup.py
本身中保留一个简单的版本字符串,并允许setuptools处理dev版本(通过setup.cfg
),以及用于版本元数据提取的distutil
通常,在setup.py
中导入整个软件包不是一个好主意,因为这需要在安装时提供所有软件包依赖项。显然,包的作者已经将zc.buildout安装为站点范围的包,并且没有注意到他的疏忽
最好的办法是在github上使用fork,删除get_版本依赖项,并在使用fork时向原始作者提出更改。是的,我确定,因为我在一个平台上打包代码,然后在另一个平台上安装。我想修改一个现有的构建配方,所以我只需要这段代码。哦,我正在做我通常的火鸡潜伏动作,但我检查了摊铺机。可能是我的解决方案。。。谢谢这正是我试图避免的解决方案。我用更好的信息更新了这篇文章。他的问题是“3.用将使用distutils api或setuptools api安装包的代码替换子流程。在我看来,这将是最好的解决方案。问题是我将如何做#3?”“嘿,Martijn,我完全同意你的观点。但我还是想知道怎么做。谢谢,塔拉西听从了你的建议。但我没有与zerokspot的开发人员合作,因为我不想等待。我仍然想学习如何做#3.很抱歉反应太晚(我的收件箱中有大量的压力和垃圾邮件,这些邮件被塔拉斯姆隐藏了)。关于setup中对整个软件包的依赖性。py:很抱歉,我在其他几个软件包中修复了这个问题,但似乎有几个软件包没有修复。将尽快更新该包。顺便说一句:如果你发现我的代码有一个问题,比如“…基本上被破坏了”,github上有一个很好的东西叫做问题跟踪器;-)嘿,OP真的可以用问题追踪器来解决这个问题。:-)很抱歉听起来对你的包裹不屑一顾,我没有深入研究它的品质,只是为了解决眼前的问题。@Horst Gutmann,谢谢你维护这个包裹。我用叉子叉了你的包裹,这是错误的。我将关闭我的软件包,再次开始使用你的软件包,如果出现其他问题,我将制作一个补丁并提交给你。
import subprocess
subprocess.call('python setup.py install')