使用PyPi时,在python3代码库中支持python2的好方法是什么?

2024-10-01 19:18:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我用python3编写了一个库,最近有一个pull请求加入了对python2.7的支持。拉请求是:https://github.com/JelteF/PyLaTeX/pull/9。在

它的基本功能是添加一些import修复并使超级调用显式。我对此有着复杂的感觉,因为我选择Python3的一个重要原因是语法更简洁,这使得它可以通过使用“丑陋”语法来兼容。不过,我喜欢那些坚持使用python2的人也可以使用这个库。在

这就是为什么我在考虑python2和python3的独立代码基。有没有办法设置PyPi,使其使用不同版本的Python代码库?最好使用单独的分支,因为在这种情况下合并新的更改会很容易。在

还是有更好的选择,我忽略了?在


Tags: 代码httpsimportgithubcom语法原因基本功能
3条回答

我不会投入太多精力在python3代码库中支持python2。你已经在以“现代”的方式运行了——增加项目的复杂性来支持那些没有升级的人,这应该是你优先考虑的事情。在

许多用python2编写的项目已经过修改,可以使用^{}工具在python3环境中运行,但是对于那些特别关注主要语言版本之间的向后兼容性的项目来说,这是一个权宜之计。这些项目在两个世界中最糟糕的环境中工作——它们必须用Python2编程,但要确保它们的更改与Python3保持兼容。在可能的情况下,更好的做法是在Python3中发布所有将来的更新。在

在您的例子中,您将从Python3开始,并讨论支持Python2的过时语义。这应该是一个无需考虑的问题,除非您真的,真正关心python2用户。即使您可以像您建议的那样使用3to2工具,并且即使您可以相信您没有引入语义问题*,您现在仍然可以继续支持和测试这一点,并且您将仅限于与python2向后兼容的改进。你有更好的事情做你的时间-如改善你的图书馆-比支持这样的问题。在

相反,我建议您拒绝这个请求,并鼓励提交者发布自己的克隆。这将您的项目与Python2需求分隔开,让您可以根据需要自由地处理项目,并让真正关心此需求的请求者在他们认为合适的情况下支持和维护它。在

*你声称“这个库并没有真正使用unicode,而且可能永远也不会”——这是一种危险的思维方式。不管使用情况如何,缺少适当的unicode支持将在以后困扰您。第一次就做对了,并假设如果不能处理unicode,将来会带来不可预见的问题,因为它绝对会。

在同一个代码库中支持python2和python3的最简单方法是使用six模块来弥合差异。不过,这仍然是一项重要的工作,两种语言之间存在语义差异,尤其是在处理文本时。在

我刚刚发布了python2.7的库。我的方法是使用3to2并在将python3代码上载到PyPi之前将其编译为2.7代码。在

mkdir -p python2_source
cp -R pylatex tests examples python2_source
3to2 python2_source -wn -f collections -f all

您还必须将python2_source添加到MANIFEST.in,这样它就会出现在您的分布式文件中。然后我在我的setup.py中有一小段代码,如果安装是使用python2.7完成的,就从python2_source文件夹安装。在

^{pr2}$

然后在实际的setup调用中使用package_dir={'': source_dir}。在

相关问题 更多 >

    热门问题