Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python in terminal

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.

like image 957
Paul Patterson Avatar asked Aug 10 '26 16:08

Paul Patterson


2 Answers

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

like image 107
dreeves Avatar answered Aug 13 '26 06:08

dreeves


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.

like image 38
Wilduck Avatar answered Aug 13 '26 05:08

Wilduck