当前位置: 首页 > 面试题库 >

有关Setuptools和替代品的问题

端木兴国
2023-03-14
问题内容

最近,我在互联网上看到了很多设置工具。最近,我读了James
Bennett的On包装文章,内容涉及为何没人应该使用setuptools。从我在Freenode上#python的时间开始,我知道那里有些人绝对讨厌它。我会把自己算在内,但我确实会使用它。

我已经在足够多的项目中使用setuptools来意识到它的不足,我希望有更好的东西。我不特别喜欢egg格式及其部署方式。面对所有setuptools的问题,我没有找到更好的选择。

我对pip之类的工具的理解是,它应该是easy_install的替代品(不是setuptools)。实际上,pip使用了一些setuptools组件,对吗?

我的大多数软件包都使用可识别setuptools的setup.py,它声明了所有依赖项。准备好它们后,我将构建一个sdist,bdist和bdist_egg,并将其上传到pypi。

如果我想切换为使用pip,我需要进行哪些更改以摆脱easy_install依赖关系?依赖项在哪里声明?我猜想我需要摆脱使用egg格式,而只提供源代码分发。如果是这样,我如何生成egg-
info目录?还是我什至需要?

这将如何改变我对virtualenv的使用?virtualenv不使用easy_install来管理环境吗?

这将如何改变我对setuptool提供的“ develop”命令的使用?我不应该使用那个吗?有什么选择?

我基本上是想了解我的开发流程的样子。

在任何人建议之前,我都没有在寻找与操作系统有关的解决方案。我主要关注的是debian linux,但是由于Ian
Bicking在此概述了原因,所以不能选择deb软件包。


问题答案:

pip使用Setuptools,不需要对软件包进行任何更改。它实际上使用Setuptools安装软件包,使用:

python -c 'import setuptools; __file__="setup.py"; execfile(__file__)' \
    install \
    --single-version-externally-managed

因为它使用该选项(--single-version-externally- managed),所以它永远不会将egg作为zip文件安装,不支持同时安装的多个软件版本,并且这些软件包是平面安装的(就像pythonsetup.pyinstall仅使用distutils时的作品一样)。Egg元数据仍已安装。pip也像easy_install一样下载并安装软件包的所有要求。

此外,
您还可以使用需求文件来添加应成批安装的其他软件包,并使版本需求更加精确(而不必在setup.py文件中放置那些确切的需求)。但是,如果您不制作需求文件,则可以像easy_install一样使用它。

对于您来说,install_requires我不建议进行任何更改,除非您一直试图创建非常好的要求,而这些要求被认为是很好的。我认为在setup.py有关版本的文件中可以有效使用的精确度是有限制的,因为您无法真正知道新库的未来兼容性如何,并且我不建议您尝试预测这种情况。需求文件是布置保守版本需求的替代位置。

您仍然可以使用python setup.py develop,实际上,如果您这样做了pip install -e svn+http://mysite/svn/Project/trunk#egg=Project,它将签出(放入src/project)并setup.py develop在其上运行。因此,工作流程并没有什么不同。

如果您冗长地运行pip(如pip install -vv),您会看到很多正在运行的命令,并且您可能会识别其中的大多数命令。



 类似资料:
  • 问题内容: 出于好奇,除了cglib之外,是否有任何(稳定)开源项目用于运行时Java代码生成?我为什么要使用它们? 问题答案: ASM [java-asm](file:///C:/questions/tagged/java-asm “显示标记为“ java-asm”的问题”) CGLIB和几乎所有其他库都建立在ASM之上,而ASM本身的作用很低。对于大多数人来说,这是一个阻止因素,因为您必须了解

  • 有哪些可用的web UI自动化框架? 我知道这个问题,但它是3年前问的,从那时起事情发生了很大的变化。我只是想看看这个问题的答案是否仍然相关,或者从那以后已经开发了更新更好的工具。 我再问一次,因为在做了一些谷歌搜索后,我偶然发现了Geb和Capybara等工具,这些工具在该问题中没有被提及作为答案。

  • 问题内容: 我们正在寻找Java WebStart的替代方案,该替代方案可以有效地完成相同的任务,并且实现得更好。我们遇到了很大的麻烦。我们有几个XP台式机办公室,所有办公室都稍有不同,到目前为止,只有少数几个在不进行认真调整的情况下工作。问题在于不能很好地使用代理设置(在Java控制面板中使用直接连接可以正常工作),拒绝在设置“ -Xmx”之类的参数时运行,而在未设置参数时运行正常(直到运行)内

  • 问题内容: 问题 在解决这个问题之后,似乎基于文件或磁盘的实现可能是解决我在此处提到的问题的正确解决方案。精简版: 目前,我已将实施为。 条目以相当固定的速率连续添加到其中。稍后对此进行详细说明。 最终,无论如何,这意味着JVM耗尽了堆空间。 在工作中,(强烈)建议我使用SQLite解决此问题,但是在问了上一个问题之后,我认为数据库不是适合此工作的合适工具。所以- 让我知道这听起来是否疯狂 -我认

  • 问题内容: py2exe是否有替代品? 问题答案: cx_Freeze是跨平台的,并且具有相同的功能,或者您可以使用py2app,它仅在Mac上有效。

  • 问题内容: 另一种选择是允许我填写带有复选框和单选按钮的HTML表单。 我正在创建一个需要用户输入的Android应用程序,并将该数据使用html表单发送到网站,然后将其填写,提交表单并返回以下结果页面。 我已经设法在eclipse中使用HtmlUnit库将数据发送到html表单并检索页面(我在下面发布了Java代码)。 但是,当我将该代码复制到我的Android项目中时,我发现Android不支