将我有一堆python脚本的情况全部从#!/usr/bin/env python
开始,或者一无所有(根本没有shebang)。其中一些脚本需要python 2.7
(或任何2.x
版本),其中一些需要python 3.x
,其中一些可以在两者上运行(这些都是自己检查python版本)。 / p>
我所在的系统有两个版本的python:python2
和python3
。一般的python
程序只是一个符号链接。
由于此python
符号链接可以更改,我想编辑脚本中的shebang,以指定此脚本是否应使用python2
或python3
。是否有任何可能/程序/脚本来解析'一个python脚本,并确定它是否应该由python2
或python3
运行?
答案 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运行?
您可以尝试使用python2
和python3
二进制文件编译您的脚本,请尝试:
$ python -mcompileall -h
如果只有python3
二进制文件可以编译脚本,则可以将python3
添加到shebang中。
Modernize, Futurize, Pylint packages还可以自动查找python2
- 仅python3
- 仅脚本。
lib2to3
允许您检测python2
或python3
个标记,例如源(Python 2标记)中存在print
语句或{{1}的存在在源代码(Python 3标记)中,它可能太低了。
答案 1 :(得分:0)
首先,将python2
或python3
放在#!
行。在* 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。