如何确保我的Python 3.6代码与其他次要版本兼容?

时间:2017-08-04 23:21:24

标签: python python-3.x

如果我在python 3.6中编写python包,那么如何确保我的代码可以下载并在其他python 3环境中运行,如python 3.5?

是什么让一些python包(例如Tensorflow)与所有python 3次要版本兼容,而其他python包(例如OpenAI Gym)只与Python 3.5兼容?

最后:如果我的目标是编写与Python 3.5和3.6兼容的代码,那么使用python 3.5环境会更好吗?

1 个答案:

答案 0 :(得分:3)

明智但真实的答案: 使用其他版本的Python测试3.6代码。 如果您想查看某些内容是否在环境 X 中正确运行,那么在环境 X 中实际运行它是无可替代的。

Tox 是一个Python测试框架,旨在在您的工作站上完成此操作。 像这样的东西往往是更大的一部分 continuous integration 框架或服务,可能托管在远程服务器上。

使用您需要支持的最早语法编写代码总是一个好主意,但这还不够。 您仍然需要测试以后的版本,因为函数或类可以更改,如果您无意中依赖于他们的行为,甚至错误修复也可能会破坏您的代码。

至于为什么某些软件包在特定的次要版本下无法运行,最可能的原因是它们使用稍后介绍的Python语言功能。 (可能它是其中一个需要语言功能的依赖项。) 这可以包括语言语法更改 Python 3.5 @ matrix-multiplication operator, 一直到看似琐事就像 Python 3.1的 printing commas as thousands-separators, 这仍然足以引发异常。

实际上有点复杂 “支持 x 或更高版本”, 因为Python的历史存在一些差距。 最可能的头痛是来自Python 2的u'' Unicode文字语法。 它在Python 3.0中删除了...... 然后 restored in Python 3.3, 在缺席之后引起了比预期更多的悲痛。 这一个更改意味着任何具有u'Unicode literal'的脚本都可以在Python 2.7和3.3+下工作,而在Python 3.0,3.1或3.2下工作。

Python文档非常适合跟踪引入功能的时间。 例如,第一件事 typing module 告诉你的是:

  

<强> 26.1。 typing - 支持类型提示

     

版本3.5中的新内容。

{new}或“in in”的Ctrl-F式搜索通常会显示所有最重要的更改。