在 Windows 10 上使用 cygwin。当我在 cygwin bash shell 上键入以下内容时:
$ python --version
Python 3.8.10
Run Code Online (Sandbox Code Playgroud)
...我知道我的默认 Python 是 3.8。但是,正在调用的实际可执行文件是什么(或在哪里)?明确地找到这个有点困难;说,which告诉我:
$ which python
/usr/bin/python
Run Code Online (Sandbox Code Playgroud)
...但如果我仔细观察:
$ ls -la /usr/bin/python*
lrwxrwxrwx 1 user None 24 Oct 1 14:06 /usr/bin/python -> /etc/alternatives/python
lrwxrwxrwx 1 user None 13 Oct 1 14:04 /usr/bin/python2 -> python2.7.exe
-rwxr-xr-x 1 user None 9235 Jan 2 2021 /usr/bin/python2.7.exe
-rwxr-xr-x 1 user None 1685 Jan 2 2021 /usr/bin/python2.7-config
lrwxrwxrwx 1 user None 16 Oct 1 14:05 /usr/bin/python2-config -> python2.7-config
lrwxrwxrwx 1 user None 25 Oct 1 14:06 /usr/bin/python3 -> /etc/alternatives/python3
lrwxrwxrwx 1 user None 14 Oct 1 14:04 /usr/bin/python3.6 -> python3.6m.exe
-rwxr-xr-x 1 user None 10259 May 5 13:22 /usr/bin/python3.6m.exe
-rwxr-xr-x 1 user None 9747 May 20 12:07 /usr/bin/python3.8.exe
Run Code Online (Sandbox Code Playgroud)
所以,事实证明它/usr/bin/python实际上是一个符号链接/etc/alternatives/python,它是一个带有 XML 内容的小二进制文件(编辑:错误,见下文);所以它不是Python解释器可执行文件。
当然,我现在已经可以猜测可执行文件是最有可能的/usr/bin/python3.8.exe- 但是,我想从 Python 本身明确地得到这个答案。
但是,如果我这样做:
$ python -c 'import sys; print(sys.executable)'
/usr/bin/python
Run Code Online (Sandbox Code Playgroud)
...我再次得到/usr/bin/python答案,这只是其他内容的符号链接,因此不是实际的可执行文件。
有没有办法从Python本身检索实际Python解释器可执行文件的绝对路径?
编辑:事实证明/etc/alternatives/python3是实际解释器的符号链接:
$ ls -al /etc/alternatives/python3
lrwxrwxrwx 1 user None 18 Oct 1 14:06 /etc/alternatives/python3 -> /usr/bin/python3.8
Run Code Online (Sandbox Code Playgroud)
...但是,我仍然想知道 Python 本身是否有办法告诉我这一点。
使用os.path.realpath
import os
import sys
print(os.path.realpath(sys.executable))
Run Code Online (Sandbox Code Playgroud)
或者
python -c 'import sys, os; print(os.path.realpath(sys.executable))'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5138 次 |
| 最近记录: |