如何检查应该使用哪个python版本

时间:2015-02-03 18:59:51

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

将我有一堆python脚本的情况全部从#!/usr/bin/env python开始,或者一无所有(根本没有shebang)。其中一些脚本需要python 2.7(或任何2.x版本),其中一些需要python 3.x,其中一些可以在两者上运行(这些都是自己检查python版本)。 / p>

我所在的系统有两个版本的python:python2python3。一般的python程序只是一个符号链接。

由于此python符号链接可以更改,我想编辑脚本中的shebang,以指定此脚本是否应使用python2python3。是否有任何可能/程序/脚本来解析'一个python脚本,并确定它是否应该由python2python3运行?

2 个答案:

答案 0 :(得分:2)

PEP 394 - The "python" Command on Unix-Like Systems

  
      
  • ... python应仅用于shebang行中的脚本   源代码兼容Python 2和3。

  •   
  • 准备最终更改默认版本   只应将Python,Python 2脚本更新为源代码   与Python 3兼容,或者在shebang行中使用python2

  •   

通常,Python 2和3都可以运行相同的脚本。这意味着(至少对于某些脚本而言)您必须阅读源代码并自行决定应该使用哪个Python版本。

  

是否有任何可能/程序/脚本来'解析'python脚本和   确定它是否应该由python2或python3运行?

您可以尝试使用python2python3二进制文件编译您的脚本,请尝试:

$ python -mcompileall -h

如果只有python3二进制文件可以编译脚本,则可以将python3添加到shebang中。

Modernize, Futurize, Pylint packages还可以自动查找python2 - 仅python3 - 仅脚本。

lib2to3允许您检测python2python3个标记,例如源(Python 2标记)中存在print语句或{{1}的存在在源代码(Python 3标记)中,它可能太低了。

答案 1 :(得分:0)

首先,将python2python3放在#!行。在* nix上,当您尝试直接“执行”文件时,操作系统应该读取该行并选择正确的二进制文件。在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。