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

vy3*_*y32 359 python path

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

Imr*_*ran 546

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

import sys

print(sys.executable)
Run Code Online (Sandbox Code Playgroud)

现在记录在这里

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

fam*_*kin 8

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

import os
python_executable_path = os.environ['_']
Run Code Online (Sandbox Code Playgroud)

例如

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

  • 它不起作用,至少在Windows上使用Anaconda. (3认同)
  • 没用但很有趣:)(也许还不便携) (2认同)
  • 看来`_`是由shell设置的.但它不需要设置,所以这可能给出错误的答案. (2认同)
  • 仅供参考,在Jupyter笔记本中,这将提供内核启动程序脚本的路径. (2认同)

kvi*_*vek 5

有几种替代方法可以确定 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)
Run Code Online (Sandbox Code Playgroud)

如果您已经在 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'
>>>
>>>
Run Code Online (Sandbox Code Playgroud)

如果您不确定 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:~ $ 
Run Code Online (Sandbox Code Playgroud)

  • “从当前执行的 Python 脚本中”写了 OP (11认同)
  • **垃圾箱火灾答案。** 外部 shell 认为的“python”(即当前“${PATH}”中“python”命令的绝对文件名)与命令之间没有确定性关系活跃的Python解释器实际上正在运行。*哎呀。* (8认同)
  • 你的“已经在 python shell 中”的例子,都假设 python shell 启动是你从 shell 输入 `python` 得到的。如果你从一个明确的不同路径(例如`/opt/python/2.5/bin/python`)开始,或者使用`python3`然后运行这些python命令,**所有这些都产生了错误的答案**并且什么都没有与不是最 Pythonic 的方式有关,这完全是错误的。 (6认同)
  • 没有回答“如何从当前正在执行的 Python 脚本中找到当前正在运行的 Python 解释器的完整路径?”的问题。 (4认同)