The Python documentation says that sys.path is “Initialized from the environment variable PYTHONPATH, plus an installation-dependent default.”
But what is the “installation-dependent default” exactly for Windows?
(I know this is probably dependent on how python was compiled, but if all I have is the binary, is there any way to figure out how the default sys.path is constructed?)
Clarification:
I am not asking “What is my sys.path?”. I want to know “how does Python construct sys.path?” Documentation says that sys.path is constructed with sys.path[0] being the script’s current directory, plus whatever Python finds in the PYTHONPATH environment variable, plus some installation-dependent voodoo. So what is this mysterious voodoo part?
Seems like Praveen Gollakota has good info at Troubleshooting python sys.path (repasted here:)
The first that is added C:\WINNT\system32\python27.zip (more details in PEP273).
Next ones that are added are from entries in windows registry. The entries
C:\Python27\DLLs;C:\Python27\lib; C:\Python27\lib\plat-win; C:\Python27\lib\lib-tkcome fromHOT_KEY_LOCAL_USER/Python/PythonCore/2.7/PythonPathin the registry. More details in Python source code comments here http://svn.python.org/projects/python/trunk/PC/getpathp.c (These entries were the trickiest for me to understand until I found the link above).Next, as explained in the
sitepackage documentation,sys.pathis built fromsys.prefixandsys.exec_prefix. On my computer both of them point toC:\Python27. And by default it searches thelib/site-packagesanyway. So now the entriesC:\Python27; C:\Python27\lib\site-packagesare appended to the list above.Next it searches each of the
.pthfiles in alphabetical order. I haveeasy_install.pth,pywin32.pthandsetuptools.pthin my site-packages. This is where things start getting weird. It would be straightforward if the entries in the.pthfiles were just directory locations. They would just get appended to thesys.pathline by line. Howevereasy_install.pthhas some python code that causes the entries listed ineasy_install.pthto add the packages list at the beginning of thesys.pathlist.After this the directory entries in
pywin32.pth,setuptools.pthare added at the end of thesys.pathlist as expected.Note: While the above discussion pertains to Windows, it is similar even on Mac etc. On Mac it just adds different OS defaults like darwin etc. before it starts looking at
site-packagesdirectory for.pthfiles.