我应该把shebang放在我的Python脚本中吗?以什么形式?
#!/usr/bin/env python
or
#!/usr/local/bin/python
它们同样便携吗?哪种形式使用最多?
注意:龙卷风项目使用shebang。另一方面,Django项目没有。
我应该把shebang放在我的Python脚本中吗?以什么形式?
#!/usr/bin/env python
or
#!/usr/local/bin/python
它们同样便携吗?哪种形式使用最多?
注意:龙卷风项目使用shebang。另一方面,Django项目没有。
当前回答
答:只有当您计划使它成为一个命令行可执行脚本时。
步骤如下:
首先验证要使用的正确的shebang字符串:
which python
从中获取输出并将其添加到第一行中(使用shebang #!)。
在我的系统上,它的反应如下:
$which python
/usr/bin/python
所以你的shebang看起来像这样:
#!/usr/bin/python
保存后,它仍然会像以前一样运行,因为python会将第一行视为注释。
python filename.py
为了使它成为一个命令,复制它以删除.py扩展名。
cp filename.py filename
告诉文件系统这将是可执行的:
chmod +x filename
要测试它,使用:
./filename
最好的做法是将它移动到你的$PATH中的某个地方,这样你只需要输入文件名本身。
sudo cp filename /usr/sbin
这样它就可以在任何地方工作(在文件名之前没有。/)
其他回答
如果你有多个Python版本,并且脚本需要在特定版本下运行,she-bang可以确保在直接执行脚本时使用正确的版本,例如:
#!/usr/bin/python2.7
注意,脚本仍然可以通过完整的Python命令行运行,或者通过导入运行,在这种情况下,she-bang将被忽略。但是对于直接运行的脚本,这是使用she-bang的一个很好的理由。
# !/usr/bin/env python通常是更好的方法,但在特殊情况下会有所帮助。
通常情况下,最好建立一个Python虚拟环境,在这种情况下,泛型#!/usr/bin/env python将为virtualenv识别正确的python实例。
这只是个人口味的问题。添加shebang意味着人们可以直接调用脚本(假设它被标记为可执行);省略它只意味着必须手动调用python。
运行程序的最终结果不会受到任何影响;这只是手段的选择。
答:只有当您计划使它成为一个命令行可执行脚本时。
步骤如下:
首先验证要使用的正确的shebang字符串:
which python
从中获取输出并将其添加到第一行中(使用shebang #!)。
在我的系统上,它的反应如下:
$which python
/usr/bin/python
所以你的shebang看起来像这样:
#!/usr/bin/python
保存后,它仍然会像以前一样运行,因为python会将第一行视为注释。
python filename.py
为了使它成为一个命令,复制它以删除.py扩展名。
cp filename.py filename
告诉文件系统这将是可执行的:
chmod +x filename
要测试它,使用:
./filename
最好的做法是将它移动到你的$PATH中的某个地方,这样你只需要输入文件名本身。
sudo cp filename /usr/sbin
这样它就可以在任何地方工作(在文件名之前没有。/)
如果你想让你的文件可执行,你必须在你的脚本中添加shebang line。
#!/usr/bin/env python3
这是更好的选择,因为这将不依赖于特定的Linux发行版,但可以用于几乎所有的Linux发行版,因为它从环境变量中寻找python3路径,这对于不同的Linux发行版是不同的。
而
#!/usr/local/bin/python3
将是python3的发行版特定路径,如果python3不在此路径上,将无法工作,并且可能导致开发人员从一个发行版迁移到另一个linux发行版时的混乱和模糊。
使用第一个
which python
这将给出输出作为python解释器(二进制)存在的位置。
这个输出可以是任意的
/usr/bin/python
or
/bin/python
现在适当地选择shebang线并使用它。
我们可以用:
#!/usr/bin/env
or
#!/bin/env