如何列出系统中安装的所有Python版本?

时间:2014-01-29 14:51:15

标签: python

我需要向用户提供一个Python安装列表供您选择以执行某些操作。我想在Windows中我可以从注册表中获取此信息。不了解Linux和Mac。

任何提示?或者你甚至可能知道我可以找到Python代码的地方吗?

编辑:我找到所有口译人员并不重要。从标准位置寻找口译员实际上是好的。同意,这不是太困难,但我只是希望有人可能会有这样的代码,或者我在stdlib中忽略了一个函数。

2 个答案:

答案 0 :(得分:4)

  

我正在编写Python IDE,我想让用户选择解释器来执行程序。

然后就像其他IDE一样,只需提供一个对话框,用户可以在其中添加他们希望能够运行代码的解释器。

Eclipse以Java Runtimes为例进行此操作,完全可以这样做。特别是像Python这样的语言,其中虚拟环境是一个重要的东西,每个都有自己的exectutable。

您当然可以提出一次性检测来检查一些常见位置。对于Windows,这显然是注册表,因为py.exe启动器需要在那里注册解释器 - 至少是系统范围的解释器。在Unix机器上,您可以检查常见的bin/文件夹,最突出的是/usr/local/bin/,这是Python安装自身的标准位置。您还可以检查PATH for Python可执行文件。但所有这些都应该仔细考虑,只提供初步设置。总有一些边缘情况,用户没有做“检测失败”的“标准事物”。例如,我的路径中没有我的Python解释器,我访问的Linux服务器已经将Python安装到我的主目录中的非标准文件夹中。最后,仅仅因为它看起来像Python并不意味着它是Python。

是的,你可以做一些猜测来提出一套初步的口译员,但实际上并没有花太多时间在上面。最后,无论如何你都无法完美地检测出一切。您将错过虚拟环境 - 这可能对用户在IDE中工作的项目非常重要。

因此,不要浪费时间检测错误,而是花更多时间创建手动对话来注册解释器。无论如何你都需要它,一个好的界面可以让它变得非常容易 - 即使是初学者 - 也可以使用它。

答案 1 :(得分:0)

不确定这是完全可能的,但这是一个肮脏的修复:

from subprocess import *
from time import sleep

for i in range(2, 4):
    x = Popen('python' + str(i) + ' --version', shell=True, stdout=PIPE, stdin=PIPE, stderr=STDOUT)
    while x.poll() == None:
        sleep(0.025)
    print('Exit code of ' + str(i) + ' is:',x.poll())
    x.stdout.close()
    x.stdin.close()

退出代码将告诉您是否安装了Python2或Python3。 您可以为python版本2.4,2.4,3.1,3.2等添加第二个迭代器。或者只是将它们保存在列表中,无论您喜欢这个已经很脏的修复。