Take the 2-minute tour ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems.. It's 100% free, no registration required.

Depending on system, python==python2 or python==python3.

Executable Python scripts, starts with:

#!/usr/bin/env python
#!/usr/bin/env python2
#!/usr/bin/env python3...

For python py3k it is provided in documentation I should/can use it with version number, so I do this:

#!/usr/bin/env python3

But I've found a problem with py2k scripts.

While in py2k documentation it is written to use : #! /usr/bin/env python ,

on some *nix-es python py3k is default, so python==python3. (For example ArchLinux python package , here python package files).

How to package (configure,make) and/or prepare python scripts for distribution to handle that ?

I ask about making software packages that can be run easily by users (without modyfing their environment)

Can I do the same trick for python py2k scripts as for python py3k scripts and set it as : #!/usr/bin/env python2 ? Can I be sure that each python py2k distribution contains python2 file, so #!/usr/bin/env python2 will work ?

If yes, why it is not proposed as standard, for example in python py2k documentation ?

share|improve this question
4  
As far as i know you can always use python2 to run it (if it installed), and alwayes you can check the version with python -V. if you want that python would be 2 or 3, you should rm /usr/bin/python and then create symlink that points from your desierd python version e.g ln -s /usr/bin/python2.5 /usr/bin/python. –  Hanan N. Dec 11 '11 at 10:36
    
Thanks for ensuring me about python2. I wonder why is it not standard to use it when there is py2k and py3k and default python can differ. What about your advice about removing - it's not proper to this example, cause I ask about packaging. I'd like to make package that can run in different configurations/systems. No way about modifying environment. What about checking - it does not apply to Shebang - as far As I know. –  Grzegorz Wierzowiecki Dec 11 '11 at 12:45
    
I believe what @Hanan N. is trying to tell you is that if you are writing Python 2.x code, then use #!...python2 in your programs and if you are using Python 3.x, then use #!...python3. Don't rely on the operating system to have the right link if you know it will only work on a specific release. I work with systems which still have Python 1.5.2 installed as /usr/bin/python - I either write code to handle older Python releases or use python2. –  Arcege Dec 11 '11 at 18:07
2  
@Arcege I don't have a python2 executable on my system (Debian squeeze). python is a symlink to python2.6, and python3 is a symlink to python3.1, but there is no python2. –  Gilles Dec 11 '11 at 23:07
1  
show 3 more comments

1 Answer 1

On older versions, there may just be python instead of python2. To make your sheebang line clearer, you could create a link python2 -> python so you can use #!/usr/bin/env python2.

share|improve this answer
    
However, it does not solve the problem stated. Because the question is how to make your script portable enough, so it can run in all of mentioned environments (with "python" "python2" etc) –  Grzegorz Wierzowiecki Aug 13 '13 at 18:37
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.