找到 Python 解释器的完整路径?

Posted

技术标签:

【中文标题】找到 Python 解释器的完整路径?【英文标题】:Find full path of the Python interpreter? 【发布时间】:2011-02-05 02:12:14 【问题描述】:

如何从当前执行的 Python 脚本中找到当前运行的 Python 解释器的完整路径?

【问题讨论】:

【参考方案1】:

sys.executable 包含当前运行的 Python 解释器的完整路径。

import sys

print(sys.executable)

现在是documented here

【讨论】:

这似乎不适用于以 env -i ./script 执行的 shebang /usr/bin/env python 的脚本。在这种情况下,它会返回当前工作目录。 @JohnFreeman:我在带有 GNU coreutils 8.4 (env) 和 Python 3.4.2 的 GNU/Linux 机器上进行了尝试。 #!/usr/bin/env python3 将通过sys.executable 返回正确的完整二进制路径。也许您的操作系统或 Python 版本的行为略有不同。 请注意,如果 Python 嵌入在某些应用程序中,这将不会返回 Python 解释器的名称。 我用 shebang 为 python2 和 python3 尝试了这个,它打印了正确的可执行文件。我也尝试不使用 shebang,并使用 pythonpython3 命令调用脚本,它打印了正确的可执行文件。 @mic_e 嵌入解释器时如何找到 python 可执行文件?【参考方案2】:

使用os.environ 只是注意到一种不同的可疑有用性方式:

import os
python_executable_path = os.environ['_']

例如

$ python -c "import os; print(os.environ['_'])"
/usr/bin/python

【讨论】:

没用但很有趣:)(也许也不便携) 看来_是shell设置的。但它不需要设置,所以这可能会给出错误的答案。 仅供参考,当在 Jupyter 笔记本中时,这会给出内核启动器脚本的路径。 _ 可以是 /usr/bin/screen 如果 Python 在 GNU Screen 中运行。 另外,使用sudo 运行Python 不会创建_ 环境变量。【参考方案3】:

有几种替代方法可以找出当前在 Linux 中使用的 python 是:

    which python 命令。 command -v python 命令 type python 命令

类似地,在 Windows 上使用 Cygwin 也会产生相同的结果。

kuvivek@HOSTNAME ~
$ which python
/usr/bin/python

kuvivek@HOSTNAME ~
$ whereis python
python: /usr/bin/python /usr/bin/python3.4 /usr/lib/python2.7 /usr/lib/python3.4        /usr/include/python2.7 /usr/include/python3.4m /usr/share/man/man1/python.1.gz

kuvivek@HOSTNAME ~
$ which python3
/usr/bin/python3

kuvivek@HOSTNAME ~
$ command -v python
/usr/bin/python

kuvivek@HOSTNAME ~
$ type python
python is hashed (/usr/bin/python)

如果您已经在 python shell 中。尝试其中任何一个。 注意:这是另一种方式。不是最好的pythonic方式。

>>> import os
>>> os.popen('which python').read()
'/usr/bin/python\n'
>>>
>>> os.popen('type python').read()
'python is /usr/bin/python\n'
>>>
>>> os.popen('command -v python').read()
'/usr/bin/python\n'
>>>
>>>

如果您不确定 python 命令的实际路径并且在您的系统中可用,请使用以下命令。

pi@osboxes:~ $ which python
/usr/bin/python
pi@osboxes:~ $ readlink -f $(which python)
/usr/bin/python2.7
pi@osboxes:~ $ 
pi@osboxes:~ $ which python3
/usr/bin/python3
pi@osboxes:~ $ 
pi@osboxes:~ $ readlink -f $(which python3)
/usr/bin/python3.7
pi@osboxes:~ $ 

【讨论】:

“在当前执行的 Python 脚本中”写了 OP 你的“已经在 python shell 中”的例子,都假设你在 shell 中输入 python 会得到启动的 python shell。如果你从一个明确的不同路径开始(例如/opt/python/2.5/bin/python),或者使用python3然后运行那些python命令,它们都产生了错误的答案,这与不是最pythonic的方式,这是完全错误的。 不回答“如何从当前正在执行的 Python 脚本中找到当前正在运行的 Python 解释器的完整路径?”的问题 Dumpster fire answer. 外部 shell 认为的 python(即 @ 的绝对文件名)之间存在 no 确定性关系当前$PATH中的987654331@命令)和活动Python解释器实际运行的命令。 哎呀。

以上是关于找到 Python 解释器的完整路径?的主要内容,如果未能解决你的问题,请参考以下文章

请教可以查看python解释器版本号或者安装路径命令

day02:Python 解释器

pycharm无法找到解释器怎么办?

robot命令找不到正确的python路径

import详解

Python学习(第五章)