发行版,distutils,setuptools和distutils2之间的区别?

如何解决发行版,distutils,setuptools和distutils2之间的区别?

| 情况 我正在尝试将开放源代码库移植到Python3。(SymPy,如果有人想知道的话。) 因此,在为Python 3构建时,我需要自动运行ѭ0。为此,我需要使用
distribute
。因此,我需要移植当前的系统(根据doctest)为
distutils
。 问题 不幸的是,我不确定这两个模块(
distutils
distribute
setuptools
)有什么区别。该文档最好是粗略的,因为它们似乎是彼此的一个分支,旨在在大多数情况下兼容(但实际上不是全部)……等等。 问题 有人可以解释差异吗?我应该用什么?什么是最现代的解决方案? (顺便说一句,我也很感谢您提供一些移植到
Distribute
的指南,但这超出了问题的范围……)     

解决方法

截至2017年1月,此问题的所有其他答案都至少已过期两年。当您遇到有关Python封装问题的建议时,请记住查看发布日期,并且不要相信过时的信息。 《 Python包装用户指南》值得一读。每个页面上都显示一个“上次审核”日期,因此您可以检查手册的最新性,而且内容很全面。它托管在Python Software Foundation的python.org的子域中,这增加了它的可信度。 “项目摘要”页面在这里尤其重要。 工具摘要: 以下是2017年1月Python封装格局的摘要: 支持的工具: Distutils仍然是使用Python打包的标准工具。它包含在标准库中(Python 2和Python 3.0至3.6)。它对于简单的Python发行版很有用,但缺少功能。它介绍了可以在
setup.py
脚本中导入的
distutils
Python软件包。 官方文档| Python软件包用户指南的“ 2”部分 Setuptools是为克服Distutils的限制而开发的,它不包含在标准库中。它引入了一个名为“ 10”的命令行实用程序。它还介绍了可以在
setup.py
脚本中导入的ѭ5Python软件包,以及可以在代码中导入以查找随发行版一起安装的数据文件的files13ѭPython软件包。它的陷阱之一是它对
distutils
Python程序包进行了猴子修补。
pip
应该可以很好地工作。它可以看到常规版本。 官方文档| Pypi页面| GitHub存储库| Python软件包用户指南的第5部分 scikit-build是一个改进的构建系统生成器,它内部使用CMake来构建编译的Python扩展。由于scikit-build不是基于distutils的,因此它实际上没有任何限制。如果存在ninja-build,则scikit-build可以比其他方法快三倍地编译大型项目。
pip
应该可以很好地工作。它可以看到常规版本。 官方文档| Pypi页面| GitHub回购 弃用/废弃的工具: Distribute是Setuptools的一个分支。它共享相同的名称空间,因此如果您安装了Distribute,则
import setuptools
实际上会导入随Distribute分发的软件包。 Distribute被合并回Setuptools 0.7,因此您不再需要使用Distribute。实际上,Pypi上的版本只是安装Setuptools的兼容层。 Distutils2试图充分利用Distutils,Setuptools和Distribute,并成为Python标准库中包含的标准工具。想法是将Distutils2分发给旧的Python版本,并且将Distutils2重命名为3.319ѭ(对于Python 3.3),并将其包含在其标准库中。这些计划没有按预期进行,但是,当前,Distutils2是一个废弃的项目。最新版本于2012年3月发布,其Pypi主页最终已更新以反映其死亡。 Alpha软件: Distlib是旨在实现以前工具功能的子集的工具,但仅实现公认的PEP中定义非常明确的功能。它是PyPA(Python打包机构)的工具之一,希望有朝一日最终将其包含在Python标准库中。它仍然被认为是alpha软件,因此最终用户要当心。 官方文档| Pypi页面| Bitbucket回购| Python软件包用户指南的第20部分 还有更多工具(例如Bento),但我不会提及它们,因为它们对于本答案过分模糊,利基,太早或尚未开发,否则它们不是直接的替代品。 建议: 因此,总而言之,在所有这些选项中,我建议使用Setuptools,除非您的要求非常基本并且只需要Distutils。 Setuptools与Virtualenv和Pip(我强烈推荐的工具)配合使用非常好。 Virtualenv和Pip都可以被认为是官方的,因为它们是PyPA的一部分,并且Python 3现在已经发行
ensurepip
(这可以帮助您在某些系统上安装
pip
)。 如果您正在研究Virtualenv,您可能会对以下问题感兴趣:
venv
pyvenv
pyenv
virtualenv
virtualenvwrapper
等之间有什么区别? (是的,我知道,我和你一起吟。) 附带说明一下,我建议使用Virtualenv 1.10或更高版本,因为它是第一个可识别适用于Python 2和3的Setuptools / Distribute合并的版本。     ,我是distutils的维护者和distutils2 / packaging的撰稿人。我在ConFoo 2011上讨论了Python封装,现在我正在编写它的扩展版本。它尚未发布,因此这里有一些摘录可以帮助定义事物。 Distutils是用于包装的标准工具。它可以满足简单的需求,但功能有限,扩展范围也不小。 Setuptools是一个旨在填补缺少的distutils功能并探索新方向的项目。在某些子社区中,这是事实上的标准。它使用Python核心开发人员不喜欢的猴子补丁和魔术。 Distribute是Setuptools的一个分支,由开发人员启动,认为它的开发速度太慢并且无法对其进行开发。当distutils2由同一组启动时,其开发速度大大减慢。 2013年8月更新:分发被合并回setuptools中并停止使用。 Distutils2是一个新的distutils库,它是distutils代码库的一个分支,从安装工具(其中一些已在PEP中进行了详细讨论)中汲取了好主意,并且是受pip启发的基本安装程序。在Python 3.3+标准库中,用于导入Distutils2的实际名称是
packaging
,在2.4+和3.1-3.2中是
distutils2
。 (将很快提供一个反向端口。)Distutils2并未发布Python 3.3版本,因此被搁置了。 更多信息: Distutils的命运– Pycon峰会+ Packaging Sprint详细报告 Distutils和Distutils2之间的快速区别 我希望很快完成我的指南,它将包含有关每个图书馆的优缺点的更多信息以及过渡指南。     ,        注意:已弃用答案,现在分发已过时。自Python打包机构成立以来,此答案已不再有效,并且已经做了很多工作来清理此问题。 是的,您知道了。 :-o我认为目前首选的软件包是Distribute,它是setuptools的一个分支,它是distutils(原始包装系统)的扩展。 Setuptools并未得到维护,因此已被分叉并重命名,但是在安装时,它使用setuptools的软件包名称!我认为大多数Python开发人员现在都在使用Distribute,并且可以肯定地说。     ,        我意识到我已经回答了您的第二个问题,但没有解决您原始问题中的毫无疑问的假设:   我正在尝试将开放源代码库(SymPy,如果有人想知道的话)移植到Python 3。   为此,在为Python 3构建时我需要自动运行2to3。 您可能不需要。其他策略在http://docs.python.org/dev/howto/pyporting中进行了描述   为此,我需要使用分配, 您可能:) distutils以不同的分发方式支持代码(不是docstrings)的构建时2to3转换,分发方式如下:http://docs.python.org/dev/howto/pyporting#during-installation     ,        在2014年末更新此问题,幸运的是Continuum的\“ conda \”软件包管理器已大大消除了Python的混乱包装。 特别地,conda迅速启用了conda \“ environments \”的创建。您可以使用不同版本的Python配置您的环境。例如:
conda create -n py34 python=3.4 anaconda
conda create -n py26 python=2.6 anaconda
将使用不同版本的Python创建两个(\“ py34 \”或\“ py26 \”)Python环境。 之后,您可以使用以下特定版本的Python调用环境:
source activate <env name>
在您必须处理不同版本的Python的情况下,此功能似乎特别有用。 此外,conda具有以下功能: 不可知的Python 跨平台 无需管理员权限 智能依赖性管理(通过SAT求解器) 很好地处理了您可能必须链接的C,Fortran和系统级库 如果您身处科学计算领域,那么最后一点尤其重要。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-