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


400

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

Answers:


606

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

import sys

print(sys.executable)

现在记录在这里


1
这在以shebang /usr/bin/env python执行为的脚本中似乎不起作用env -i ./script。在这种情况下,它将返回当前工作目录。
John Freeman

2
@JohnFreeman:我在带有GNU coreutils 8.4(env)和Python 3.4.2的GNU / Linux机器上尝试了此操作。 #!/usr/bin/env python3将通过返回正确的完整二进制路径sys.executable。也许您的OS或Python版本的行为略有不同。
kevinarpe 2015年

25
请注意,如果Python嵌入在某些应用程序中,则此操作不会返回Python解释器的名称。
mic_e 2015年

1
我用shebang尝试了python2和python3,并打印了正确的可执行文件。我也尝试了没有shebang的情况,并使用pythonpython3命令调用了脚本,并打印了正确的可执行文件。
David Baucum

8

只是使用os.environ以下方法来指出有用性的另一种方式:

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

例如

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

2
无用但有趣的是:)(也许也不是可移植的)
eudoxos

2
似乎_是由外壳设置的。但这不需要设置,因此可能会给出错误的答案。
vy32 2015年

2
仅供参考,当使用Jupyter笔记本时,这提供了内核启动器脚本的路径。
福斯先生18年

2

有几种其他方法可以找出Linux中当前使用的python:1)which python命令。2)command -v python命令3)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'
>>>
>>>

5
“从当前正在执行的Python脚本中”撰写了OP
nodakai

3
您的“已经在python shell中”示例全部假设,如果您python从shell中键入,则会启动python shell。如果您从一个明确的不同路径开始(例如/opt/python/2.5/bin/python),或者使用python3然后运行这些python命令,它们全部都会产生错误的答案,并且与不是最pythonic的方式无关,这是完全错误的。
安东
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.