【发布时间】:2016-04-24 00:02:41
【问题描述】:
我不知道该怎么做。如果我让我的 shell (bash) 启动 python 而不给它一个确切的路径,它会以某种方式启动错误的程序(或者可能是正确的程序,但加载了错误的 dylibs)。然而,which python 和 /usr/bin/env python 的输出看起来都很好。
这是我在说什么的插图:
好的,首先,我的python 命令来自哪里?让我们按照符号链接。 (顺便说一句,太糟糕了 readlink -f 和 realpath 在 OSX 上不存在......)
$ which python
/usr/local/bin/python
$ ls -l /usr/local/bin/python
lrwxr-xr-x 1 root wheel 68 Jan 18 11:44 /usr/local/bin/python@ -> ../../../Library/Frameworks/Python.framework/Versions/2.7/bin/python
$ ls -l /Library/Frameworks/Python.framework/Versions/2.7/bin/python
lrwxr-xr-x 1 root admin 7 Jan 18 11:44 /Library/Frameworks/Python.framework/Versions/2.7/bin/python@ -> python2
$ ls -l /Library/Frameworks/Python.framework/Versions/2.7/bin/python2
lrwxr-xr-x 1 root admin 9 Jan 18 11:44 /Library/Frameworks/Python.framework/Versions/2.7/bin/python2@ -> python2.7
$ ls -l /Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7
-rwxrwxr-x 1 root admin 25624 Dec 5 15:57 /Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7*
如果我打电话给/usr/local/bin/python,python 本身认为它在哪里?它是什么版本?
$ /usr/local/bin/python -c "import sys; print sys.executable; print sys.version_info"
/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python
sys.version_info(major=2, minor=7, micro=11, releaselevel='final', serial=0)
好的,看起来合法。如果我让/usr/bin/env 为我定位python,而不是输入/usr/local/bin/python,会怎样?
$ /usr/bin/env python -c "import sys; print sys.executable; print sys.version_info"
/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python
sys.version_info(major=2, minor=7, micro=11, releaselevel='final', serial=0)
同样的事情。到目前为止没有任何惊喜。好的,如果我只输入python 会怎样?那应该和/usr/bin/env python一样吧?
$ python -c "import sys; print sys.executable; print sys.version_info"
/usr/local/bin/python
sys.version_info(major=2, minor=7, micro=10, releaselevel='final', serial=0)
等等,什么? sys.executable 指向符号链接,版本错误。怎么回事?
为什么输入python 与输入/usr/local/bin/python 有任何不同?
顺便说一句:
- 我仔细检查了我的 bash 别名,
python不是其中之一。 (alias | grep python)
【问题讨论】: