Specify Python interpreter for Python script in Unix and Windows

given this script: test.py:

#!/usr/bin/python

import sys
print sys.executable

what’s the output of these following scripts?

./test.py
. venv/bin/activate
(venv) ./test.py
. venv/bin/activate
(venv) python test.py

outputs:

usr/bin/pyton
usr/bin/python
/private/tmp/venv/bin/python

the Unix Shebang will be used to locate the interpreter when the script triggered directly.

in the example, Shebang is hard-coded to /usr/bin/python, actually there’s a more flexiable way which uses the path to find the interpreter:

#!/usr/bin/env python

it works perfect with the virtualenv.

conclusion

Unix

if you want to run your python script using a virtual environment on a Unix machine:

  • use #!/usr/bin/env python as the Shebang:
. venv/bin/activate
(venv) ./test.py
  • or use the python interpreter directly:

    /tmp/venv/bin/python test.py
    

Windows

There’s no Shebang for Windows, it you run test.py, it always uses the default python interpreter. if you want to specify the python interpreter, use it directly:

c:\tmp\venv\Scripts\python c:\tmp\test.py
- 2016-05-30 edit