如果我在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环境会更好吗?
答案 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
式搜索通常会显示所有最重要的更改。