When a non built-in module is imported, the interpreter searches in the locations given by sys.path. sys.path is initialized from these locations (http://docs.python.org/library/sys.html#sys.path):
- the directory containing the input script (or the current directory)
- PYTHONPATH
- the installation-dependent default
While the first two sources are straight-forward, can anyone explain how the third one works, and what possibilities there are for influencing it?
Although I would be interested in a general solution, my specific issues are:
- I have installed the Enthought distribution 7.2 32-bit, and then Scipy-Superpack. Now enthought python tries to import numpy from
/Library/Python/2.7/, which is where superpack installed them, instead of from the enthought site-packages. - a
wxPythonapplication created withpy2app-Adoes not have the samesys.pathas when starting the application withpython start_app.py.
The basis of the third source is set at compile time (or configure time, more precisely), depending on the platform. It is then expanded and added to at run-time via
.pthfiles, etc. (which is something you can do once the Python executable is compiled to influence that third source).This page of the Python documentation has all the information on how
.pthfiles work, and also more information on howsys.pathis constructed from build-time settings, etc. http://docs.python.org/library/site.htmlI'm not sure why you want to influence that third source specifically though, when you can influence the whole
sys.path. Anyhow, the three ways of influencingsys.path(without recompiling Python or patching the source code) are:.pthfiles and dropping them where Python scans for packages. (See the link earlier for details.)Programmatically, by importing
sysand then appending or prepending tosys.pathHopefully one of these three ways should help you do what you want.