The python docs at http://docs.python.org/library/sys.html say that sys.path
is...
Initialized from the environment variable PYTHONPATH, plus an installation-dependent default.
I found a path item in my sys.path
that was causing problems, and had a lot of trouble tracking it down. All I could turn up on Google was people explaining how to add items to the PYTHONPATH
variable.
My question is: are there any tools that can help track down why a particular item is on your sys.path
? How can I find out more about the "installation-dependent default"?
So far, I've found a partial answer is to use strace
on python itself and look for .pth
files. I also found a sys.path_im开发者_StackOverflowporter_cache
, which may or may not be applicable.
I had some issues recently with sys.path
and here is how I went about trying to figure out where the entries are coming from. I was able to track all the entries and where they were coming from. Hopefully this will help you too.
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-tk
come fromHOT_KEY_LOCAL_USER/Python/PythonCore/2.7/PythonPath
in 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
site
package documentation (link),sys.path
is built fromsys.prefix
andsys.exec_prefix
. On my computer both of them point toC:\Python27
. And by default it searches thelib/site-packages
anywways. So now the entriesC:\Python27; C:\Python27\lib\site-packages
are appended to the list above.Next it searches each of the
.pth
files in alphabetical order. I haveeasy_install.pth
,pywin32.pth
andsetuptools.pth
in my site-packages. This is where things start getting weird. It would be straightforward if the entries in the.pth
files were just directory locations. They would just get appended to thesys.path
line by line. Howevereasy_install.pth
has some python code that causes the entries listed ineasy_install.pth
to add the packages list at the beginning of thesys.path
list.After this the directory entries in
pywin32.pth
,setuptools.pth
are added at the end of thesys.path
list 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-packages
directory for .pth
files.
In your case, you can start by starting a python shell and checking where sys.prefix
and sys.exec_prefix
point to and then drilling down from there.
Note 2: If you are using an IDE such as Aptana/PyDev it will add more configurations of its own. So you need to be wary of that.
精彩评论