This question concerns running python files in terminal that are not stored in the home directory. I think I have solved the first bit of this puzzle by modifying my path so that it includes the directory where my python programs are stored.
So where as initially
echo $PATH would yield the following: /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin
it now yields:
/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:/Users/paulpatterson/Documents/Python
However despite the fact that the correct folder is now in my path, none of the python files within this folder run. For example there is a file in there called recap.py, when I open terminal and type in:
python recap.py
I get:
python: can't open file 'recap.py': [Errno 2] No such file or directory
If I simply type in recap.py (i.e. omitting the 'python' bit), I get:
-bash: /Users/paulpatterson/Documents/Python/recap.py: Permission denied
Can anyone enlighten me? Ideally I want to set it up so as soon as terminal opens all I need to do is type the file name and not even type python.
I've spent hours trying to sort this out, any help is appreciated.
Paul.
Including the directory where a command lives in your $PATH means you can run commands in that directory from anywhere. But in your first example, you are running the command "python" with recap.py as an argument. So your shell does not search your $PATH to find where recap.py lives. To make recap.py runnable as a command by itself, see this:
http://en.wikipedia.org/wiki/Shebang_(Unix)
In short, you need to include #!/usr/bin/env python as the first line, and chmod the file to be executable (chmod u+x recap.py).
You may have tried this before, but I ran into similar problems at one point and this is the process that works for me. In the directory where recap.py is stored:
chmod +x recap.py
./recap.py
The ./ being the key part, as it works as the full path to the directory. This also assumes that you have
#!/usr/bin/env python
or something similar as the first line of your program. The first two characters first line is called a shebang and indicates that the file is a script to be executed by the interpreter specified by the path following it. So, as others have suggested, your python interpreter may be located somewhere other than /usr/bin (possibly in /bin), so you'll need to find this, and include this line at the top of any python script you wish to execute from the terminal.
If you don't know where python is located, you can use:
which python
at the terminal, which should print the path to your python install. You can then use that path after your shebang.
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