2017-08-04 71 views
1

如果我在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环境会更好吗?

+5

[tox](https://tox.readthedocs.io/en/latest/) – Ryan

回答

2

明智的回答: 用这些其他版本的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”通常会发现所有最重要的变化。

相关问题