跨平台指定execv运行时的Python解释器的方法
我现在在Linux和Windows 7上都在运行一个Python脚本。这个文件是用一种叫execv的方式执行的,也就是说,文件开头有一行命令来指定解释器。
在Windows系统中,解释器的指定方式是:
#!C:\Python26\python.exe
但是在Linux中,这个指定方式需要改成:
#!/usr/bin/python
我希望这个脚本能在两个系统上都能运行,而不需要一次又一次地修改这一行。
我尝试过以下几种方法:
#!C:\Python26\python.exe
#!/usr/bin/python
还有:
#!C:\Python26\python.exe;/usr/bin/python
所以,我想知道有没有办法可以指定多个解释器?
3 个回答
有没有办法让我指定多个解释器呢?
其实你不需要这样做。在Windows系统上(至少只要你没有安装CygWin或类似的工具),Shebang行会被当作普通的Python注释来处理;这意味着它会被忽略。Windows知道应该用Python解释器来运行.py
和.pyw
文件,因为在安装Python的时候就已经告诉它了。
根据你想做的事情,这个方法可能有点复杂,但0install可以用适合你平台的Python解释器来运行你的程序。在你程序的XML描述中,可以这样写(比如,如果你想要Python版本大于等于2.6,小于3):
<command name="run" path="myprog.py">
<runner interface="http://repo.roscidus.com/python/python">
<version not-before="2.6" before="3"/>
</runner>
</command>
详细信息请查看:http://www.0install.net/local-feeds.html
这样做的话,如果用户还没有安装合适版本的Python,0install会自动下载一个合适的版本。
需要注意的是,即使你只针对Linux系统,也可能需要这样做,因为在Python 3中,没有一行代码能在所有平台上都能正常工作(有些平台,比如Arch,需要用“python2”而不是“python”,而其他平台,比如Debian,则只提供“python”,不提供“python2”)。
#!/usr/bin/env python
这段话的意思是,它会调用一个叫做 env
的程序,去你的系统路径中寻找一个Python可执行文件。
如果你想确保使用特定版本的Python,可以这样做:
#!/usr/bin/env python3.11