如何检查应该使用哪个 python 版本
How to check which python version is supposed to use
假设我有一堆 python 脚本全部以 #!/usr/bin/env python
开头或什么都没有(根本没有 shebang)。其中一些脚本需要 python 2.7
(或任何 2.x
版本),其中一些需要 python 3.x
,其中一些可以 运行在两者上(它们自己检查 python 版本)。
我的系统有两个 python 版本:python2
和 python3
。一般 python
程序只是一个符号链接。
由于此 python
符号链接可以更改,我想编辑脚本中的 shebang 以指定此脚本是否应使用 python2
或 python3
。是否有任何 possibility/program/script 到 'parse' 的 python 脚本并确定它是否应该通过 python2
或 python3
获得 运行?
首先,将 python2
或 python3
放在 #!
行。在 *nix 上,当您尝试直接 'execute' 文件时,OS 应该读取该行并且 select 应该读取正确的二进制文件。在 Windows 上,省略 'usr/bin/env 并使用 py.exe 到 运行 文件,该文件现在随 PSF CPython 安装程序一起安装。示例:tem.py 包含
#! python2
import sys; print(sys.version)
在命令行
C:\Users\Terry>py /programs/python34/tem.py
2.7.9 (default, Dec 10 2014, 12:28:03) [MSC v.1500 64 bit (AMD64)]
如果我在文件中将 2 更改为 3,输出将更改为 3.4.2。
PEP 394 - The "python" Command on Unix-Like Systems:
... python
should be used in the shebang line only for scripts that are
source compatible with both Python 2 and 3.
in preparation for an eventual change in the default version of
Python, Python 2 only scripts should either be updated to be source
compatible with Python 3 or else to use python2
in the shebang line.
一般来说,Python 2 和 3 都可以 运行 同一个脚本。这意味着(至少对于某些脚本而言)您必须阅读源代码并自行决定要做什么Python 应该使用版本。
Is there any possibility/program/script to 'parse' a python script and
determine if it should get run by python2 or python3?
您可以尝试使用 python2
和 python3
二进制文件 编译 您的脚本,尝试:
$ python -mcompileall -h
如果只有 python3
二进制文件可以编译脚本,您可以将 python3
添加到 shebang 中。
Modernize, Futurize, Pylint packages 还可以帮助自动查找仅 python2
、仅 python3
的脚本。
lib2to3
允许您检测 python2
或 python3
标记,例如源中存在 print
语句(Python 2 标记)或来源(Python 3 标记)中存在 yield from
,但它可能级别太低。
假设我有一堆 python 脚本全部以 #!/usr/bin/env python
开头或什么都没有(根本没有 shebang)。其中一些脚本需要 python 2.7
(或任何 2.x
版本),其中一些需要 python 3.x
,其中一些可以 运行在两者上(它们自己检查 python 版本)。
我的系统有两个 python 版本:python2
和 python3
。一般 python
程序只是一个符号链接。
由于此 python
符号链接可以更改,我想编辑脚本中的 shebang 以指定此脚本是否应使用 python2
或 python3
。是否有任何 possibility/program/script 到 'parse' 的 python 脚本并确定它是否应该通过 python2
或 python3
获得 运行?
首先,将 python2
或 python3
放在 #!
行。在 *nix 上,当您尝试直接 'execute' 文件时,OS 应该读取该行并且 select 应该读取正确的二进制文件。在 Windows 上,省略 'usr/bin/env 并使用 py.exe 到 运行 文件,该文件现在随 PSF CPython 安装程序一起安装。示例:tem.py 包含
#! python2
import sys; print(sys.version)
在命令行
C:\Users\Terry>py /programs/python34/tem.py
2.7.9 (default, Dec 10 2014, 12:28:03) [MSC v.1500 64 bit (AMD64)]
如果我在文件中将 2 更改为 3,输出将更改为 3.4.2。
PEP 394 - The "python" Command on Unix-Like Systems:
...
python
should be used in the shebang line only for scripts that are source compatible with both Python 2 and 3.in preparation for an eventual change in the default version of Python, Python 2 only scripts should either be updated to be source compatible with Python 3 or else to use
python2
in the shebang line.
一般来说,Python 2 和 3 都可以 运行 同一个脚本。这意味着(至少对于某些脚本而言)您必须阅读源代码并自行决定要做什么Python 应该使用版本。
Is there any possibility/program/script to 'parse' a python script and determine if it should get run by python2 or python3?
您可以尝试使用 python2
和 python3
二进制文件 编译 您的脚本,尝试:
$ python -mcompileall -h
如果只有 python3
二进制文件可以编译脚本,您可以将 python3
添加到 shebang 中。
Modernize, Futurize, Pylint packages 还可以帮助自动查找仅 python2
、仅 python3
的脚本。
lib2to3
允许您检测 python2
或 python3
标记,例如源中存在 print
语句(Python 2 标记)或来源(Python 3 标记)中存在 yield from
,但它可能级别太低。