How can I make any use of PYTHONPATH? When I try to run a script in the path the file is not found. When I cd to the directory holding the script the script runs. So what good is the PYTHONPATH?
$ echo $PYTHONPATH
:/home/randy/lib/python
$ tree -L 1 '/home/randy/lib/python'
/home/randy/lib/python
├── gbmx_html.py
├── gbmx.py
├── __init__.py
├── __pycache__
├── scripts
└── yesno.py
$ python gbmx.py -h
python: can't open file 'gbmx.py': [Errno 2] No such file or directory
$ cd '/home/randy/lib/python'
After cd to the file directory it runs ..
$ python gbmx.py -h
usage: gbmx.py [-h] [-b]
Why can I not make any use of the PYTHONPATH?
PYTHONPATH
only affectsimport
statements, not the top-level Python interpreter's lookup of python files given as arguments.Needing
PYTHONPATH
to be set is not a great idea - as with anything dependent on environment variables, replicating things consistently across different machines gets tricky. Better is to use Python 'packages' which can be installed (using 'pip', or distutils) in system-dependent paths which Python already knows about.Have a read of [ http://guide.python-distribute.org/introduction.html - Broken Link] https://the-hitchhikers-guide-to-packaging.readthedocs.org/en/latest/ - 'The Hitchhiker's Guide to Packaging', and also http://docs.python.org/2/tutorial/modules.html - which explains PYTHONPATH and packages at a lower level.
I think you're a little confused. PYTHONPATH sets the search path for importing python modules, not for executing them like you're trying.
http://docs.python.org/2/using/cmdline.html#envvar-PYTHONPATH
What you're looking for is PATH.
However, to run your python script as a program, you also need to set a shebang for Python in the first line. Something like this should work:
And give execution privileges to it:
Then you should be able to simply run
gmbx.py
from anywhere.With PYTHONPATH set as in your example, you should be able to do
-m
option will make Python search for your module in paths Python usually searches modules in, including what you added to PYTHONPATH. When you run interpreter likepython gmbx.py
, it looks for particular file and PYTHONPATH does not apply.I think you're mixed up between PATH and PYTHONPATH. All you have to do to run a 'script' is have it's parental directory appended to your PATH variable. You can test this by running
Also, if
myscripy.py
depends on custom modules, their parental directories must also be added to the PYTHONPATH variable. Unfortunately, because the designers of python were clearly on drugs, testing your imports in the repl with the following will not guarantee that your PYTHONPATH is set properly for use in a script. This part of python programming is magic and can't be answered appropriately on stackoverflow.You're confusing PATH and PYTHONPATH. You need to do this:
PYTHONPATH is used by the python interpreter to determine which modules to load.
PATH is used by the shell to determine which executables to run.