在这里,我们将给大家分享关于Python部署和/usr/bin/env可移植性的知识,让您更了解python可移植性强吗的本质,同时也会涉及到如何更有效地#!/usr/bin/envpython、#!
在这里,我们将给大家分享关于Python部署和/ usr / bin / env可移植性的知识,让您更了解python可移植性强吗的本质,同时也会涉及到如何更有效地#!/usr/bin/env python、#!/usr/bin/env python 与 #!/usr/bin/python 的区别、#!/usr/bin/env python3和# -*- coding: utf-8 -*-、#!/usr/bin/env python与#!/usr/bin/python的区别的内容。
本文目录一览:- Python部署和/ usr / bin / env可移植性(python可移植性强吗)
- #!/usr/bin/env python
- #!/usr/bin/env python 与 #!/usr/bin/python 的区别
- #!/usr/bin/env python3和# -*- coding: utf-8 -*-
- #!/usr/bin/env python与#!/usr/bin/python的区别
Python部署和/ usr / bin / env可移植性(python可移植性强吗)
在所有可执行Python脚本的开头,我都添加了shebang行:
#!/usr/bin/env python
我在env python
产生Python 2.2环境的系统上运行这些脚本。我的脚本很快失败了,因为我需要手动检查兼容的Python版本:
if sys.version_info < (2, 4): raise ImportError("Cannot run with Python version < 2.4")
如果可能,我不想更改每个可执行文件的shebang行;但是,我无权对计算机进行更改的结果,env python
也不想强制使用特定版本,例如:
#!/usr/bin/env python2.4
我想避免这种情况,因为系统可能具有比Python 2.4更高的版本,或者可能具有Python 2.5但没有Python 2.4。
什么是优雅的解决方案?
[编辑:]我在提出问题时还不够具体-我想让用户无需手动配置即可执行脚本(例如,更改路径或符号链接~/bin
并确保PATH~/bin
位于Python
2.2路径之前)。也许需要一些分发实用程序来防止手动调整?
答案1
小编典典“ env”只是执行它在PATH env var中找到的第一件事。要切换到其他python,请在调用脚本之前将该python可执行文件的目录放在路径之前。
#!/usr/bin/env python
作用是指出你想要你的这个文件中的代码用什么可执行程序去运行它
#!/usr/bin/python是告诉操作系统执行这个脚本的时候,调用/usr/bin下的python解释器
#!/usr/bin/env python这种用法是为了防止操作系统用户没有将python装在默认的/usr/bin路径里
当系统看到这一行的时候,首先会到env设置里查找python的安装路径,再调用对应路径下的解释器程序完成操作
#!/usr/bin/python相当于写死了python路径
#!/usr/bin/env python会去环境设置寻找python目录,推荐这种写法
以test.py为例,脚本内容如下:
test(): print 'hello,world'
name == "main":
test()
运行脚本:
python test.py
输出:
hello,world
换一种方法运行:
./test.py
会提示出错,文件无可执行权限:
-bash: ./test.py: Permission denied
将文件设为可执行:
chmod +x test.py
继续运行:
./test.py
提示:
./test.py: line 1: Syntax error near unexpected token `('
./test.py: line 1: `def test():'
那是因为系统默认该脚本是shell脚本,把它当shell语句执行,当然失败了。
在前面加上
申明l这是个python脚本,要用python解释器来运行:
./test.py
输出:
hello,world
这个东东常用在cgi脚本中,apache启动cgi脚本时就靠它来知道这是个python脚本,执行它需要的python解释器路径在哪里。
有时候写 #!/usr/bin/python 还是不行,很简单,因为python解释器没有装在/usr/bin/目录,改成其所在目录就行了
更通用的方法是:#!/usr/bin/env python
#!/usr/bin/env python 与 #!/usr/bin/python 的区别
面试的时候,面试官问我:为什么 linux 下写 python 代码的第一行常常是:#!/usr/bin/env python ?
我没有答得上来,回去查了查原来是这样的:
脚本语言的第一行,目的就是指出,你想要你的这个文件中的代码用什么可执行程序去运行它,就这么简单
#!/usr/bin/python 是告诉操作系统执行这个脚本的时候,调用 /usr/bin 下的 python 解释器;
#!/usr/bin/env python 这种用法是为了防止操作系统用户没有将 python 装在默认的 /usr/bin 路径里。当系统看到这一行的时候,首先会到 env 设置里查找 python 的安装路径,再调用对应路径下的解释器程序完成操作。
#!/usr/bin/python 相当于写死了 python 路径;
#!/usr/bin/env python 会去环境设置寻找 python 目录,推荐这种写法
在计算机科学中,Shebang(也称为 Hashbang)是一个由井号和叹号构成的字符序列(#!
),其出现在文本文件的第一行的前两个字符。 在文件中存在 Shebang 的情况下,类 Unix 操作系统的程序载入器会分析 Shebang 后的内容,将这些内容作为解释器指令,并调用该指令,并将载有 Shebang 的文件路径作为该解释器的参数 [1]。
#!/usr/bin/env python3和# -*- coding: utf-8 -*-
#!/usr/bin python3
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#!/usr/bin/env python3表示 python3 解释器所处的绝对路径就是 /usr/bin/python3,这样可以避免python2来解释python 3的代码(python2与python3有差异),但 /usr/bin/python3指定的是绝对路径如果碰到 python 解释器不在该路径下的话, 脚本就无法执行了。
因此建议用环境变量的路径#!/usr/bin/env python3,这样会去"PATH 环境变量"中查找 python3 解释器的位置, 路径没有被写死, 再调用该路径下的解释器来执行脚本.
“# -- coding: utf-8 --”这个代码表示声明编码方式为utf-8,因为windows里默认的编码是ascii,当程序中出现非ascii编码时ken''en可能会报错。
#!/usr/bin/env python与#!/usr/bin/python的区别
#!/usr/bin/python
是告诉操作系统执行这个脚本的时候,调用/usr/bin下的python解释器;
#!/usr/bin/env python
这种用法是为了防止操作系统用户没有将python装在默认的/usr/bin路径里。当系统看到这一行的时候,首先会到env设置里查找python的安装路径,再调用对应路径下的解释器程序完成操作。
#!/usr/bin/python
相当于写死了python路径; 或者,用指定的python执行,尤其在系统里面同时安装了多个版本的python时,需要指定python的路径,比如同时安装了python2和python3,需要指定用哪个版本来执行。
#!/usr/bin/env python
会去环境设置寻找python目录(相当于 which python);采用默认的python执行。
REF
https://blog.csdn.net/wh_19910525/article/details/8040494
关于Python部署和/ usr / bin / env可移植性和python可移植性强吗的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于#!/usr/bin/env python、#!/usr/bin/env python 与 #!/usr/bin/python 的区别、#!/usr/bin/env python3和# -*- coding: utf-8 -*-、#!/usr/bin/env python与#!/usr/bin/python的区别等相关内容,可以在本站寻找。
本文标签: