[Python-Dev] Excluding the current path from module search path?

Chris Withers chris at simplistix.co.uk
Thu Aug 27 01:48:40 CEST 2009

Nick Coghlan wrote:
> The details of the sys.path manipulation at program startup are
> documented here:
> http://docs.python.org/using/cmdline.html#command-line
> The directory prepended to sys.path is based on the code executed by the
> command line.

It's more subtle than that though...

The OP in http://bugs.python.org/issue1734860 is being bitten by the 
same expectation that I am: sitecustomize.py should be found somewhere 
on the sys.path present at the start of the script/module/command/etc 
being executed. (The bug referenced in that report makes things worse, 
because this used to work, at least on Windows ;-) )

The problem is that site.py (and therefore sitecustomize.py) is imported 
early in main.c on line 516 as part of Py_Initialize(), but the path of 
the current script only gets added later on in RunMainFromImporter 
called on line 569.

Strictly speaking, the docs at http://docs.python.org/library/site.html 
aren't lying, but it takes an understanding of when site.py is imported 
that isn't available to anyone who doesn't read C to know why a path 
that is present on sys.path when the user's script starts isn't being 
searched for sitecustomize.py

What do people feel about this?

At the very least, I'd like to add a warning box in site.html to explain 
why sitecustomize might not be found where people expect.

I'd *like* to have the paths be the same for site.py as they are for the 
subsequent code that's executed, but would that make too much of a mess 
of main.c and runpython.c?



Simplistix - Content Management, Batch Processing & Python Consulting
            - http://www.simplistix.co.uk

More information about the Python-Dev mailing list