【问题标题】:How to get the python.exe location programmatically? [duplicate]如何以编程方式获取 python.exe 位置? [复制]
【发布时间】:2020-07-13 23:16:42
【问题描述】:

基本上我想获得一个 Python 解释器的句柄,这样我就可以传递一个脚本文件来执行(来自外部应用程序)。

【问题讨论】:

  • @Bhargav Rao:这个问题是在 应该重复的问题 1 年前提出的,怎么可能是重复的?反之亦然。
  • @mhawke 另一个人的观点比这个多,措辞也更好。因此,我在相反的方向上欺骗了它。 TBH,他们俩确实说同样的话,所以我们甚至可以标记合并。
  • @BhargavRao:是的,写得更好,标题可能对此负责。此外,接受的答案更好,并且(现在)包含文档链接,所以总的来说我认为你是对的。

标签: python


【解决方案1】:

这适用于 Linux 和 Windows:

Python 3.x

>>> import sys
>>> print(sys.executable)
C:\path\to\python.exe

Python 2.x

>>> import sys
>>> print sys.executable
/usr/bin/python

【讨论】:

  • 是的 - >>> 导入系统 | >>> 打印 sys.executable | C:\Python25\pythonw.exe
  • 我认为在 py2exe 编译的应用程序中,它会指向应用程序的可执行文件,而不是 python.exe。不过,必须有人确认。
  • 只有在您已经在运行 Python 解释器时才有意义。我认为他正试图从 Python 本身之外找到位置。
  • "programmatically" 我认为意味着来自 python 解释器。至少,当我可以搜索这个答案时,这对我意味着什么:)
  • 如下所述,这不起作用,例如在环境中或者如果您安装了多个 python 版本。显然这里你想要当前使用的 python 版本。
【解决方案2】:

如果在嵌入式 python 环境中工作,sys.executable 是不可靠的。我的建议是从

import os
os.__file__

【讨论】:

  • py_interpreter = os.path.join(os.__file__.split("lib/")[0],"bin","python"))
  • @Akelian 你的右括号太多了。否则那就太好了!
  • 我的系统无法正常工作,我的 lib 目录是“Lib”,所以小写的“lib/”无法拆分。
  • 也许更确切地说,pathlib.Path(os.__file__).parents[2] / 'bin' / 'python'
  • 有人能解释一下为什么它在嵌入式 python 环境中不可靠吗?当他们说“有意义”的系统时,documentation 是否意味着反例?
【解决方案3】:

我认为这取决于您如何安装 python。请注意,您可以在我的机器上安装多个 python。但是,如果您通过 msi 安装 python 2.2 或更高版本,我相信它会创建一个像这样的注册表项:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\Python.exe

在我的机器上给出了这个值:

C:\Python25\Python.exe

您只需读取注册表项即可获取位置。

但是,您可以通过类似 xcopy 的模型安装 python,您可以在任意位置安装它,您只需要知道它的安装位置。

【讨论】:

  • 如果它在 App Paths 中,您甚至不需要知道位置是吗? ;)
  • 看注册表其实用处不大,因为你不知道你运行的是不是注册表里那个说的python。
猜你喜欢
  • 2012-02-20
  • 1970-01-01
  • 2011-08-12
  • 2017-08-19
  • 1970-01-01
  • 1970-01-01
  • 2011-04-06
  • 2013-01-06
相关资源
最近更新 更多