Mercurial > cpython-lru_cache-weakref
view Python/frozen.c @ 86436:76184b5339f2
Issue #18416: Have importlib.machinery.PathFinder treat '' as the cwd
and stop importlib.machinery.FileFinder treating '' as '.'.
Previous PathFinder transformed '' into '.' which led to __file__ for
modules imported from the cwd to always be relative paths. This meant
the values of the attribute were wrong as soon as the cwd changed.
This change now means that as long as the site module is run (which
makes all entries in sys.path absolute) then all values for __file__
will also be absolute unless it's for __main__ when specified by file
path in a relative way (modules imported by runpy will have an
absolute path).
Now that PathFinder is no longer treating '' as '.' it only makes
sense for FileFinder to stop doing so as well. Now no transformation
is performed for the directory given to the __init__ method.
Thanks to Madison May for the initial patch.
| author | Brett Cannon <brett@python.org> |
|---|---|
| date | Fri, 18 Oct 2013 11:39:04 -0400 |
| parents | a06fc2c2342a |
| children |
line wrap: on
line source
/* Dummy frozen modules initializer */ #include "Python.h" #include "importlib.h" /* In order to test the support for frozen modules, by default we define a single frozen module, __hello__. Loading it will print some famous words... */ /* To regenerate this data after the bytecode or marshal format has changed, go to ../Tools/freeze/ and freeze the flag.py file; then copy and paste the appropriate bytes from M___main__.c. */ static unsigned char M___hello__[] = { 99,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0, 0,64,0,0,0,115,20,0,0,0,100,2,0,90,1,0, 101,2,0,100,0,0,131,1,0,1,100,1,0,83,40,3, 0,0,0,117,12,0,0,0,72,101,108,108,111,32,119,111, 114,108,100,33,78,84,40,3,0,0,0,117,4,0,0,0, 84,114,117,101,117,11,0,0,0,105,110,105,116,105,97,108, 105,122,101,100,117,5,0,0,0,112,114,105,110,116,40,0, 0,0,0,40,0,0,0,0,40,0,0,0,0,117,7,0, 0,0,102,108,97,103,46,112,121,117,8,0,0,0,60,109, 111,100,117,108,101,62,1,0,0,0,115,2,0,0,0,6, 1, }; #define SIZE (int)sizeof(M___hello__) static const struct _frozen _PyImport_FrozenModules[] = { /* importlib */ {"_frozen_importlib", _Py_M__importlib, (int)sizeof(_Py_M__importlib)}, /* Test module */ {"__hello__", M___hello__, SIZE}, /* Test package (negative size indicates package-ness) */ {"__phello__", M___hello__, -SIZE}, {"__phello__.spam", M___hello__, SIZE}, {0, 0, 0} /* sentinel */ }; /* Embedding apps may change this pointer to point to their favorite collection of frozen modules: */ const struct _frozen *PyImport_FrozenModules = _PyImport_FrozenModules;
