人们为什么在Python脚本的第一行上编写#!/ usr / bin / env python shebang?
在我看来,如果没有该行,文件运行相同。
#1楼
您可以使用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
#2楼
强调大多数人错过的一件事可能是有道理的,这可能会阻止立即理解。 在终端中键入python ,通常不会提供完整路径。 而是在PATH环境变量中查找可执行文件。 反过来,当您想直接执行Python程序/path/to/app.py ,必须告诉Shell使用什么解释器(通过hashbang ,上面其他贡献者在解释什么)。
Hashbang希望有完整的口译员。 因此,要直接运行Python程序,您必须提供Python二进制文件的完整路径,该路径有很大差异,尤其是考虑到使用virtualenv时 。 为了解决可移植性,使用了/usr/bin/env的技巧。 后者最初旨在就地更改环境并在其中运行命令。 如果未提供任何更改,它将在当前环境中运行该命令,从而有效地导致相同的PATH查找。
来自unix stackexchange的来源
#3楼
那就是shebang线 。 如Wikipedia条目所述 :
在计算中,“ shebang”(也称为“ hashbang”,“ hashhpling”,“ bang bang”或“ crunchbang”)是指字符“#!”。 当它们是解释器指令中的前两个字符时(作为文本文件的第一行)。 在类似Unix的操作系统中,程序加载器将这两个字符的存在指示为文件是脚本,并尝试使用文件中第一行其余部分指定的解释器执行该脚本。
另请参见Unix FAQ条目 。
即使在Windows上,shebang行不能确定要运行的解释程序,您也可以通过在shebang行上指定选项来将选项传递给解释程序。 我发现将通用的shebang行保留在一次性脚本中(例如我在回答SO问题时编写的脚本)非常有用,因此我可以在Windows和ArchLinux上快速对其进行测试。
使用env实用程序可以在路径上调用命令:
剩下的第一个参数指定要调用的程序名称; 根据
PATH环境变量进行搜索。 任何剩余的参数将作为参数传递给该程序。
#4楼
如果安装了多个版本的Python,则/usr/bin/env将确保使用的解释器是环境的$PATH的第一个解释器。 另一种方法是对#!/usr/bin/python类的东西进行硬编码; 可以,但是不太灵活。
在Unix中,要解释的可执行文件可以通过#!来指示要使用的解释器#! 在第一行的开头,接着是解释器(及其可能需要的所有标志)。
当然,如果您在谈论其他平台,则此规则不适用(但“ shebang行”没有害处,并且如果您将该脚本复制到具有 Unix基础的平台(例如Linux,Mac),将有帮助等)。
#5楼
这是一个Shell约定,它告诉Shell哪个程序可以执行脚本。
#!/usr/bin/env python
解析为Python二进制文件的路径。
来源:http://www.1994july.club/seo/?p=1675
人们为什么在Python脚本的第一行上编写#!/ usr / bin / env python shebang?的更多相关文章
- python头部 #!/usr/bin/env python
*.py运行: python *.py OR ./*.py 对于*.py其首行应标明 #!/usr/bin/env python,定义python解释器调用路径,对比#!/usr/bin/python ...
- 关于#!/usr/bin/env python 的用法
在linux的一些脚本里,需在开头一行指定脚本的解释程序,如: !/usr/bin/env python 再如: !/usr/bin/env perl 那么 env到底有什么用?何时用这个呢?脚本用e ...
- Python脚本语言第一行的写法
脚本语言的第一行,目的就是指出,你想要你的这个文件中的代码用什么可执行程序去运行它,就这么简单 #!/usr/bin/python是告诉操作系统执行这个脚本的时候,调用/usr/bin下的python ...
- Python程序中首行#!/usr/bin/env python的作用
1.通常我们在pycharm中写程序的时候会在首行写上#!/usr/bin/env python 如: #!/usr/bin/env python3#-*-coding: UTF-8 -*-#Auth ...
- 调用python脚本报错/usr/bin/env: python : No such file or directory
一.调用python脚本报错 /usr/bin/env: python: No such file or directory 二.解决方法 原因是在windows上编写的脚本,使用dos2unix对脚 ...
- ubuntu 执行Python脚本出现: /usr/bin/env: ‘python\r’: No such file or directory
原因: #!/usr/bin/env python 在ubuntu会变成 #!/usr/bin/env python\r 而\r 会被shell 当成参数 所以出现: /usr/bin/env: ‘ ...
- !/usr/bin/env python和!/usr/bin/python的区别
脚本语言第一行 作用:文件中代码用指定可执行程序运行 #!/usr/bin/Python 执行脚本时,调用/usr/bin下python解释器 #!/usr/bin/env python 在环境设 ...
- python中#!/usr/bin/python与#!/usr/bin/env python的区别
目的是在运行python脚本的时候告诉操作系统我们要用python解释器去运行py脚本 所以我们在第一句往往会写如下两句中的其中一句: #!/usr/bin/python 或 >#!/usr/b ...
- python 解释器声明 unix #!/usr/bin/env python
python 解释器声明 unix #!/usr/bin/env python 1. 问题的开始在代码移植到unix平台后,部分应用在运行时报如下错误:subprocess.Popen():OSErr ...
随机推荐
- RocketMQ之一:RocketMQ整体介绍
常用MQ介绍及对比--<MQ详解及四大MQ比较> RocketMQ环境搭建--<RocketMQ之三:RocketMQ集群环境搭建> RocketMQ物理部署结构 Rocket ...
- Java中XML的四种解析方式(二)
三.JDOM解析 特征: 1.仅使用具体类,而不使用接口. 2.API大量使用了Collections类. import org.jdom2.Attribute; import org.jdom2.D ...
- 剑指offer27:按字典序打印出该字符串中字符的所有排列
1 题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. 输入描述: ...
- 14 IF函数
情景 某销售表,如果员工的销售额大于5000元,提成为10%,否则为8% IF函数 =IF(表达式,值1,值2) 判断表达式,如果表达式为真,显示值1,如果表达式为假,显示值2 示例
- WUSTOJ 1349: TLE(Java)算法优化
题目链接:1349: TLE Description WH在刷题时,设计出了如下代码: #include<stdio.h> int main() { int i, j, cnt, k, N ...
- ssh使用
上传: scp myfile.txt username@192.168.1.1:/homw/ 下载: scp username@192.168.1.5:/home/myfile.txt / ...
- 【并发】7、借助redis 实现多线程生产消费队列
1.这是第一个简单的初始化版本,看起来比使用fqueue似乎更好用 package queue.redisQueue; import queue.fqueue.vo.TempVo; import re ...
- PB之常用函数
原文网址:https://www.cnblogs.com/zhaoxiong/p/8082523.html PB之常用函数 弹出窗口:messagebox() 基本写法:Messagebox('标题' ...
- oracle_job进程相关学习测试
Oracle cjq0进程测试 测试流程: .CJQ进程不存在 .模拟问题处理 .问题总结 一.问题现象 CJQ0进程不存在 [root@adg1 ~]# ps -ef|grep cjq root : ...
- Powershell学习笔记:(一)、初识Powershell
什么是Powershell? MSDN上的说明是:PowerShell 是构建于 .NET 上基于任务的命令行 shell 和脚本语言. PowerShell 可帮助系统管理员和高级用户快速自动执行用 ...