我在与python
默认值不同的可执行文件下运行 python 脚本。
我/usr/bin
在/mydir/mybins
.
如果我跑,我得到:
$which python
/usr/bin/python
Run Code Online (Sandbox Code Playgroud)
如果运行run.py
:
# cat run.py
#!/usr/bin/env /mydir/mybins/python
import os
import sys
print(u"Python executable: %s" % sys.executable)
print(u"From within Python PATH=%s" % os.environ[u"PATH"])
Run Code Online (Sandbox Code Playgroud)
我得到
# ./run.py
Python executable: /mydir/mybins/python
From within Python PATH=/usr/bin:... (and no /mydir/mybins)
Run Code Online (Sandbox Code Playgroud)
为什么?这是故意的吗?如何在/usr/bin/python
不更改代码的情况下使用它?
该env
实用程序将其参数作为命令执行。
如果参数没有给出路径,如在 中env python
,命令将在 中查找$PATH
。env
在#!
脚本的-line 中使用时,这通常是您想要的。
如果参数是一个给定的路径,将在该路径执行命令。
在您的#!
-line 中,您执行特定的 Python 解释器。将$PATH
永远不会被搜索到。你也可以
#!/mydir/mybins/python
Run Code Online (Sandbox Code Playgroud)
因为这个env
位实际上什么都不做。
要让$PATH
效果生效,请使用
#!/usr/bin/env python
Run Code Online (Sandbox Code Playgroud)
然后将使用python
找到的第一个可执行文件$PATH
。
另一种方法是#!
通过在命令行上使用显式解释器执行脚本来完全绕过-line:
$ python run.py
Run Code Online (Sandbox Code Playgroud)
或者,
$ /usr/bin/python run.py
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
114 次 |
最近记录: |