如果我在python 3.6中编写python包,那么我如何确保我的代码可以下载并运行在其他python 3环境中,比如python 3.5?如何确保我的Python 3.6代码与其他次要版本兼容?
是什么让一些python软件包(例如Tensorflow)与所有python 3 minor版本兼容,而其他Python软件包(例如OpenAI Gym)只与Python 3.5兼容?最后:如果我的目标是编写与Python 3.5和3.6兼容的代码,那么使用python 3.5环境会更好吗?
如果我在python 3.6中编写python包,那么我如何确保我的代码可以下载并运行在其他python 3环境中,比如python 3.5?如何确保我的Python 3.6代码与其他次要版本兼容?
是什么让一些python软件包(例如Tensorflow)与所有python 3 minor版本兼容,而其他Python软件包(例如OpenAI Gym)只与Python 3.5兼容?最后:如果我的目标是编写与Python 3.5和3.6兼容的代码,那么使用python 3.5环境会更好吗?
明智的回答: 用这些其他版本的Python测试你的3.6代码。 如果你想看看在环境中运行正确X,在环境中实际运行它是不可替代的X。
Tox 是一个Python测试框架,专门用于在您的工作站上完成此操作。 类似这样的东西通常是更大的框架或服务的一部分,可能托管在远程服务器上。
用您需要支持的最早语法编写代码始终是一个好主意,但这还不够。 你仍然需要测试后来的版本,因为函数或类可以改变,甚至错误修复可能会破坏你的代码,如果你不知不觉地取决于他们的行为。
至于为什么有些包不根据具体的次要版本的工作,最可能的原因是,他们使用,后来推出了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版本中的新功能。
A Ctrl-F
样式搜索“new in”或“changed in”通常会发现所有最重要的变化。
[tox](https://tox.readthedocs.io/en/latest/) – Ryan