如何从Python 3脚本中找到Python 2解释器路径?

时间:2015-08-17 17:48:43

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

假设我有一个名为a_python2_script.py且内容为

的文件
print "Hello"

并在Python 3中使用:

调用它
from subprocess import Popen
Popen(["python2", "a_python2_script.py"])

这很有效,但我不想硬编码python2解释器调用,因为该程序应该在Windows和Linux上运行。

我知道sys.executable,但这会给我当前(即Python 3)解释器的路径。从Python 3脚本中获取Python 2解释器路径的pythonic方法是什么?

注意:我正在调用外部Python 2库,没有机会将其转换为Python 3。

2 个答案:

答案 0 :(得分:0)

这可能是一种可能的解决方法。我目前正在运行Windows,并使用Anaconda和Anaconda3安装了Python。我的PATH包含这两个文件夹。

一个简单的脚本可以检查每个PATH位置是否存在Python可执行文件。然后,您可以在每个位置执行python --version

import sys, os
from subprocess import Popen

python_paths = []

for path in os.environ["PATH"].split(os.pathsep):
    for executable in ["python", "python.exe", "python2"]:
        if os.path.isfile(os.path.join(path, executable)):
            python_paths.append(path)

for path in python_paths:
    Popen([os.path.join(path, "python"), "--version"])      

print(python_paths)

在我的Windows机器上,这给出了:

['d:\\Anaconda', 'd:\\Anaconda3']
Python 2.7.9 :: Anaconda 2.2.0 (32-bit)
Python 3.4.3 :: Anaconda 2.3.0 (32-bit)

使用Python 3.4.3进行测试。我目前无法检查Linux的结果。

答案 1 :(得分:0)

使用os.get_exec_path()(3.2中提供)获取将搜索可执行文件的目录列表。

In [1]: import os

In [2]: paths = os.get_exec_path()

In [5]: for p in paths:
   ...:     for prog in ["python2", "python2.exe"]:
   ...:         attempt = os.path.join(p, prog)
   ...:         if os.path.isfile(attempt):
   ...:             print(attempt)
   ...:             
/usr/local/bin/python2