我在Python文件的顶部看到了这些:
#!/usr/bin/env python
#!/usr/bin/env python3
在我看来,没有这一行,文件运行是一样的。
我在Python文件的顶部看到了这些:
#!/usr/bin/env python
#!/usr/bin/env python3
在我看来,没有这一行,文件运行是一样的。
当前回答
这是一个shell约定,告诉shell哪个程序可以执行脚本。
#!/usr/bin/env python
解析为Python二进制文件的路径。
其他回答
这是推荐的方法,在文档中提出:
2.2.2. 可执行Python脚本 在BSD的Unix系统上,可以直接编写Python脚本 可执行,就像shell脚本一样 # !/usr/bin/env python3.2
从http://docs.python.org/py3k/tutorial/interpreter.html executable-python-scripts
考虑到python2和python3之间的可移植性问题,您应该始终指定其中一个版本,除非您的程序与两个版本都兼容。
一些发行版现在已经发布了python符号链接到python3 -不要依赖于python是python2。
PEP 394强调了这一点:
为了容忍不同平台的差异,所有的新代码 需要调用Python解释器时不应该指定Python,但是 而是应该指定python2或python3(或更具体的 python2。X和python3。x版本;参见迁移说明)。这 当从shell调用时,应该在shebangs中进行区分 脚本,当通过system()调用调用时,或在任何 其他上下文。
技术上讲,在Python中,这只是一个注释行。
这一行只在从shell(从命令行)运行py脚本时使用。这就是所谓的“Shebang!”,它被用于各种情况,而不仅仅是Python脚本。
在这里,它指示shell启动特定版本的Python(以处理文件的其余部分)。
您可以使用virtualenv尝试解决这个问题
这里是test.py
#! /usr/bin/env python
import sys
print(sys.version)
创建虚拟环境
virtualenv test2.6 -p /usr/bin/python2.6
virtualenv test2.7 -p /usr/bin/python2.7
激活每个环境,然后检查差异
echo $PATH
./test.py
它允许你选择你想要使用的可执行文件;这是非常 如果你有多个python安装和不同的模块,这很方便 在每一个愿望中选择。如。
#!/bin/sh
#
# Choose the python we need. Explanation:
# a) '''\' translates to \ in shell, and starts a python multi-line string
# b) "" strings are treated as string concat by python, shell ignores them
# c) "true" command ignores its arguments
# c) exit before the ending ''' so the shell reads no further
# d) reset set docstrings to ignore the multiline comment code
#
"true" '''\'
PREFERRED_PYTHON=/Library/Frameworks/Python.framework/Versions/2.7/bin/python
ALTERNATIVE_PYTHON=/Library/Frameworks/Python.framework/Versions/3.6/bin/python3
FALLBACK_PYTHON=python3
if [ -x $PREFERRED_PYTHON ]; then
echo Using preferred python $ALTERNATIVE_PYTHON
exec $PREFERRED_PYTHON "$0" "$@"
elif [ -x $ALTERNATIVE_PYTHON ]; then
echo Using alternative python $ALTERNATIVE_PYTHON
exec $ALTERNATIVE_PYTHON "$0" "$@"
else
echo Using fallback python $FALLBACK_PYTHON
exec python3 "$0" "$@"
fi
exit 127
'''
__doc__ = """What this file does"""
print(__doc__)
import platform
print(platform.python_version())