使用execv运行时跨平台指定Python解释器的方法

5

我现在在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
+1:今天最有趣的问题。 - S.Lott
3个回答

4

根据您要完成的任务不同,这可能有些繁重,但是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下载适当版本的Python。
请注意,即使您只针对Linux,您可能仍希望这样做,因为在Python 3中,没有适用于所有平台的单个#!行(某些平台例如Arch需要"python2"而不是"python",而其他平台例如Debian则不提供"python2",只提供"python")。

3
#!/usr/bin/env python

这将调用env程序,在您的PATH中搜索Python可执行文件。

如果您需要确保特定版本的Python,可以执行以下操作:

#!/usr/bin/env python3.11

1
Windows不使用shebang行来确定如何运行文件。Windows的标准Python安装程序设置了可以像其他可执行文件一样从命令行运行.py/.pyw文件,因此您不必担心Windows。 - Liquid_Fire
重点是我在Windows上没有可用的/usr/bin/env。 - jsalonen
@jsalonen:重点是它们是不同的操作系统,几乎没有任何共同之处。你所要求的跨操作系统无法完成。 - S.Lott
@jsalonen 在 Windows 上不需要有 /usr/bin/env - 当在 Windows 上运行时,Shebang 行将被视为普通注释! - TheEagle

0

有没有办法指定多个解释器?

不需要。在Windows上(至少在您没有安装CygWin或类似软件的情况下),Shebang行被视为普通的Python注释;这意味着它会被忽略。Windows知道应该使用Python解释器运行.py.pyw文件,因为在安装Python时已经告知了它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接