【问题标题】:How to make sure which version of Python I need?如何确定我需要哪个版本的 Python?
【发布时间】:2020-01-27 11:40:45
【问题描述】:

当我下载一些 Python 项目时,我很难找到需要哪个 Python 的区别。我知道 python2 print "Hello world"python3 print("Hello world") 之间有区别,但差别不大。

例如,有一些有趣的demo 可以尝试,但按照那里的说明进行操作后,我仍然无法正常工作。所以我想知道,它需要版本 3 还是版本 2?不用说,这个项目不会在任何地方使用print ;)

那么,语法级别的主要区别是什么,可以帮助初学者推断,需要Python2还是Python3?

这个问题不是关于运行上面提到的演示,而是关于区分 Python 版本,因为这不是我第一次想知道同样的问题,因为 python 专家似乎没有在他们的项目非常频繁。

【问题讨论】:

  • 通常文档应该告诉你。 Python 2 已停产,如果您使用的是最近的任何代码,那么它应该现在都是 Python 3。这些天,只有非常非常老的项目可能需要 Python 2。
  • 不再支持 Python2。你应该始终以 Python3 为目标,除非代码使用了一些奇怪的 Python2 特定的东西,否则它很容易移植(甚至可以按原样工作)。
  • @h4z3 谢谢,如果我曾经针对某些东西,那肯定是 v3,但我不确定其他人很少 ;)
  • @deceze 在特定情况下作者使用mkvirtualenv,AFAIK 来自 v2 工具。那么我能得出什么结论呢?
  • @w.k virtualenvwrapper / mkvirtualenv 在 Python 3 中工作得很好,在 Python 2 中使用它的人通常仍然在 3 中使用它,因为他们喜欢工作流程。

标签: python python-3.x python-2.7


【解决方案1】:

正如您所说,最明显的检查是 print,但我想提供一些额外的建议,以快速准确地了解您使用的代码是为 Python 2 还是 Python 3 编写的.

检查 Python 3 linting
使用PyLint指定--py3k参数

检查脚本编译

您可以使用此命令来检查您的代码是否为 Python 2 和/或 Python 3 编译:

$ python2 -m py_compile foo.py
$ python3 -m py_compile foo.py

如果您遇到两者之一的编译错误,这可以为您提供快速解决方案。

检查 2to3 输出

如果您的代码可以在两个 Python 版本中运行,但在两个版本之一中都不能正常工作,您也可以尝试运行此处提供的“2 到 3”转换器:
https://docs.python.org/2/library/2to3.html

此转换器用于将脚本从 Python 2 转换为 Python 3。 如果建议转换,您很可能正在查看 Python 2 脚本。

在两个不同的虚拟环境中运行代码

最后的测试是创建两个不同的虚拟环境,一个使用 Python 3,一个使用 Python 2,并检查两者的代码功能。

在我看来,所有这些方法都比手动检查代码更容易、更快且更不容易出错。

【讨论】:

  • 似乎,在句法层面上很难判断需要哪个版本。我接受您的回答,因为它包含区分差异的额外努力。谢谢!
【解决方案2】:

您的示例演示项目有各种提示,它适用于 Python2。

  1. backend/manage.py 的第一行是
#!/usr/bin/env python

除非代码是为在 Arch Linux 上运行而编写的,否则这个可执行文件将是 Python2。

  1. backend/simple_app/* 中的许多文件都有这一行:
from __future__ import unicode_literals

这在 Python3 中不需要,因为所有字符串都是 unicode 字符串。

  1. 该项目最近一次更新是在 3 年前。

【讨论】:

  • 它也完全可以交叉兼容……
  • 它可能是,但即使是交叉兼容的东西仍然(部分)适用于 Python2。
  • 你确定第一点吗?我一直以为,这个shebang会调用虚拟环境的python解释器,不管是python2还是python3?
  • 我已经对我的系统进行了相当多的修改,所以也许这只是我,但不管我在/usr/bin/env python 中的哪个 venv 访问系统 python。此外,我总是被告知使用/usr/bin/env python3,如果那是所需的版本。
  • 在阅读了一些内容之后,它似乎取决于操作系统。对于 Windows 系统,python 默认为 python2(参见 PEP 397),而在类似 UNIX 的系统上,它可能调用 python2python3(参见 PEP 394)。因此,确切地指定需要使用哪个版本的 python 解释器,似乎是要走的路。
猜你喜欢
  • 1970-01-01
  • 2011-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-27
  • 1970-01-01
  • 2011-01-29
相关资源
最近更新 更多