找到 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,并使用 python
和 python3
命令调用脚本,它打印了正确的可执行文件。
@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 解释器的完整路径?的主要内容,如果未能解决你的问题,请参考以下文章