7

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?

1
  • 3
    +1: Funniest question of the day. Commented Oct 21, 2010 at 15:49

3 Answers 3

4

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

Sign up to request clarification or add additional context in comments.

Comments

3
#!/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

4 Comments

@jsalonen Windows doesn't use the shebang line to determine what to run the file with. The standard Python installer for Windows sets it up so you can run .py/.pyw files from the command line just like any other executable, so you shouldn't need to worry about Windows.
The point being that I don't have /usr/bin/env available on Windows
@jsalonen: The point being that they're different operating systems and have almost nothing in common. What you're asking for cannot be done across operating systems.
@jsalonen you don't need to have /usr/bin/env available on Windows - when run on Windows, the Shebang line will simply be treated as a normal comment !
0

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.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.