I installed two python 2.7.3 into my home directory
one is for Linux: /home/luban/Linux/Python/2.7.3
another is for Solaris: /home/luban/SunOS/Python/2.7.3
then I create a wrapper named "python" in /home/luban/bin to call the different python when I am working on different systems.
[luban@lunbanworks 1] ~ > cat /home/luban/bin/python
#!/bin/sh
CMD=`basename $0`
OS=`uname -s`
CMD_PATH="/home/luban/$OS/Python/2.7.3/bin"
if [ -x "${CMD_PATH}/${CMD}" ];then
export PATH="${CMD_PATH}:${PATH}"
exec ${CMD_PATH}/${CMD} ${1+"$@"}
else
echo "${CMD} is not available for ${OS}" 1>&2
exit 1
fi
[luban@lunbanworks 2] `ls -l /home/luban/bin/python`
-rwxrwxr-x 1 luban lunban 221 Apr 5 19:11 python*
I use below script to test the wrapper /home/luban/bin/python
[luban@lunbanworks 3] ~ > cat myscript.py
#!/home/luban/bin/python
myname="lunban"
print "myname is %s" % myname
[luban@lunbanworks 4] chmod +x myscript.py
I want to use ./ run myscript.py
[luban@lunbanworks 5] ~ >./myscript.py
myname=luban: Command not found.
lpr: Unable to access "myname" - No such file or directory
use /home/luban/bin/python myscript.py
can work:
[luban@lunbanworks 5] ~ > `/home/luban/bin/python myscript.py`
myname is luban
After I change the shebang line to #!/home/luban/Linux/Python/2.7.3/bin/python
, use ./
can execute the script.
[luban@lunbanworks 6] ~ >cat myscript.py
#!/home/luban/Linux/Python/2.7.3/bin/python
myname="lunban"
print "myname is %s" % myname
[luban@lunbanworks 7] ~ >./myscript.py
myname is luban
Why when I use #!/home/luban/Linux/Python/2.7.3/bin/python
at the beginning of myscript.py, ./myscript.py
can work,
but if I use the wrapper #!/home/luban/bin/python
in my python script, use ./
to run the script, it cannot not work?
I had many scripts used #!/home/luban/bin/python
when I only installed python under #!/home/luban/
for Linux, they can run with ./
, I don't want to change them,
so, how to let ./
run the python script If I want to KEEP wrapper #!/home/luban/bin/python
as the shebang line?
DEIT:
./myscript.py
can NOT work with the wrapper #!/home/luban/bin/python
under CentOS 5.4, Bash 3.2.25
today, I have a test under CentOS 6.4, Bash 4.1.2
:
I added
echo '$0 =' $0
echo '${COMMAND_PATH}/${COMMAND} ${1+"$@"} =' ${COMMAND_PATH}/${COMMAND} ${1+"$@"}
into the wrapper #!/home/luban/bin/python
to track.
./myscript.py
works with the wrapper #!/home/luban/bin/python
[luban@lunbanworks 20] ./myscript.py
$0 = /home/luban/bin/python
${COMMAND_PATH}/${COMMAND} ${1+"$@"} = /home/luban/Linux/Python/2.7.3/bin/python ./myscript.py
myname is luban
So I suppose that it may be a Bash 3.2.25 bug for ./
when I use the wrapper #!/home/luban/bin/python
?
Have you considered:
#!/usr/bin/env python
That generally works for me, so long as python is found in the search path.
In your case, you would want your profile to have the following in the profile setup:
# Adjust for your preferred shell
export PATH=/home/luban/Linux/Python/2.7.3:/home/luban/SunOS/Python/2.7.3:$PATH
Then, when your python script runs with the "#!/usr/bin/env python" shebang, it will find the right python for you.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With