Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Tags:

python

execv

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?

like image 871
jsalonen Avatar asked Aug 05 '26 13:08

jsalonen


2 Answers

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").

like image 117
Thomas Leonard Avatar answered Aug 07 '26 03:08

Thomas Leonard


#!/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
like image 42
mechanical_meat Avatar answered Aug 07 '26 04:08

mechanical_meat