什么时候应该在.py脚本的顶部指定python解释器?

什么时候应该在.py脚本的顶部指定python解释器?,python,Python,作为习惯,我总是在.bash/.py脚本的顶部指定一个默认解释器。我刚刚注意到,这会导致我对virtualenv产生问题,因为解释器指向/usr/bin/python,而不是venv。所以我在想,什么时候不应该用这种方式指定解释器?如果你的脚本是可执行的,你的操作系统就会知道使用哪个解释器 给定一个名为my_script的可执行文件,该文件以 #/bin/bash:您的操作系统将使用/bin/bash来解释脚本 #/usr/bin/python:您的操作系统将使用/usr/bin/python

作为习惯,我总是在.bash/.py脚本的顶部指定一个默认解释器。我刚刚注意到,这会导致我对virtualenv产生问题,因为解释器指向
/usr/bin/python
,而不是venv。所以我在想,什么时候不应该用这种方式指定解释器?

如果你的脚本是可执行的,你的操作系统就会知道使用哪个解释器

给定一个名为
my_script
的可执行文件,该文件以

  • #/bin/bash
    :您的操作系统将使用
    /bin/bash
    来解释脚本
  • #/usr/bin/python
    :您的操作系统将使用
    /usr/bin/python
    来解释脚本
但有一个警告是——正如您在使用virtualenvs时注意到的那样——人们不一定有相同的解释器路径

一种解决方法和良好实践是使用调用命令


#/usr/bin/env-python
将使用在您路径中找到的第一条python,在您的情况下,它将是您的virtualenv的python

它如何导致您出现virtualenv问题?您可以像“/app.py”一样直接启动py脚本。如果您想直接运行脚本,例如,
/spam.py
,或者甚至只运行
spam.py
,如果您已经在路径上的某个位置安装了它,那么您需要在顶部添加一行shbang。但是您可以使用
/usr/bin/env-python
而不是
/usr/bin/python
。平台上的
env
手册页应该对此进行解释。(BSD有一个名为“在shell脚本中使用”的部分;GNU…我认为它会引导您访问
info env
或其他内容,其中包含更多细节,但访问起来不太方便。)@Sraw yes。这是错误的吗?但无论如何,这不是关于Python的问题,而是关于POSIX脚本的问题。我不确定这是否意味着你应该在这里用不同的标签提问,或者在另一个SE站点提问。但是,除非您特别想关注与venvs相关的一些细节(在这种情况下,您应该拥有与此相关的标记以及Python),否则我认为这不是正确的位置。正如abarnert所说,如果您想直接执行脚本,您需要shbang行。如果使用
/path/to/python app.py
启动脚本,则不需要它。