开发者

Cross-platform way to specify Python interpreter when running with execv

开发者 https://www.devze.com 2023-01-21 13:32 出处:网络
I am currently running a Python scripts both on Linux and Windows 7. The file is executed in an execv style with which I mean that the interpreter is defined in the beginning of the file in a command.

I am currently running a Python scripts both on Linux and Windows 7. The file is executed in an execv style with which I mean that the interpreter is defined in the beginning of the file in a command.

In Windows system, the interpreter specification is:

#!C:\Python26\python.exe

However in Linux this needs to be

#!/usr/bin/python

I would like to run this script in both systems without having to change this line again and again.

I have tried out the 开发者_高级运维following:

#!C:\Python26\python.exe
#!/usr/bin/python

as well as:

#!C:\Python26\python.exe;/usr/bin/python

So: is there any way I could specify multiple interpreters?


Depending on what you're trying to do, this might be a bit heavy-weight, but 0install can run your program will the appropriate Python interpreter for your platform. In your program's XML description, do something like this (e.g. if you want 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>

See: http://www.0install.net/local-feeds.html

This will also make 0install download a suitable version of Python if the user doesn't have it already.

Note that you may want to do this even if you're only targetting Linux, because with Python 3 there is no single #! line that works on all platforms (some platforms, e.g. Arch, require "python2" not "python", while others, e.g. Debian, don't provide "python2", only "python").


#!/usr/bin/env python

That will call the env program to search your PATH for a Python executable.

If you need to ensure a specific version of Python you can do e.g.:

#!/usr/bin/env python3.11


Is there any way I could specify multiple interpreters ?

You don't need to. On Windows (at least as long as you don't have CygWin or similar installed), the Shebang line is treated as a normal Python comment; that means, it is ignored. Windows knows that it should run .py and .pyw files with the Python interpreter, because it is told that upon installation of Python.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号