我正在创建几个python脚本的包装器,并且当计算机上安装了多个版本的python时遇到了一个小问题。例如,在我的Mac上,可以通过命令行中的“python”访问python 2.7,并使用python 3.4“python3”。有没有办法确定当前python实例是如何启动的,以便我可以确定子进程将使用正确的版本?
import subprocess
def main():
pythonCommand = determineCommand() #What is python install as on this computer
argArray = [pythonCommand, "test.py"] #requires python 3.4
subprocess.call(argArray)
#What I need to figure out
def determineCommand():
#If Some Check
return "python3"
#Else some other check
return "python"
#else something weird
return "python34"
#and so on
if __name__ == "__main__":
main()
以上代码无法在我的计算机上正常执行,但在安装了python 3.4的计算机上运行正常。更改argArray以使用python3可以在我的计算机上运行但在其他计算机上打破它。
答案 0 :(得分:2)
可以通过sys.version_info
:
chuck@computer:~$ python
>>> import sys; sys.version_info
sys.version_info(major=2, minor=7, micro=10, releaselevel='final', serial=0)
>>> exit()
chuck@computer:~$ python3
>>> import sys; sys.version_info
sys.version_info(major=3, minor=4, micro=3, releaselevel='final', serial=0)
>>>
version_info
属性适用于所有Python版本> = 2.0。
如果您需要某个版本,可以在模块中添加一个检查:
import sys
v = sys.version_info
if sys.version_info.major < 3:
raise Exception("Incompatible Python version: %d.%d" % (v.major, v.minor))
答案 1 :(得分:2)
要获取用于启动当前Python解释器的可执行文件,请阅读sys.executable
。它是当前运行的Python解释器二进制文件的绝对路径(尽管在奇怪的情况下它可以是空字符串或public ImportFile() {
// some codes here
}
public ExportFile() {
// some codes here
}
,如冻结的可执行文件等)。