2 /* Module definition and import implementation */
6 #include "Python-ast.h"
7 #undef Yield /* undefine macro conflicting with winbase.h */
26 /* for stat.st_mode */
27 typedef unsigned short mode_t
;
30 extern time_t PyOS_GetLastModificationTime(char *, FILE *);
33 /* Magic word to reject .pyc files generated by other Python versions.
34 It should change for each incompatible change to the bytecode.
36 The value of CR and LF is incorporated so if you ever read or write
37 a .pyc file in text mode the magic number will be wrong; also, the
38 Apple MPW compiler swaps their values, botching string constants.
40 The magic numbers must be spaced apart atleast 2 values, as the
41 -U interpeter flag will cause MAGIC+1 being used. They have been
42 odd numbers for some time now.
44 There were a variety of old schemes for setting the magic number.
45 The current working scheme is to increment the previous value by
61 Python 2.3a0: 62011 (!)
66 Python 2.5a0: 62081 (ast-branch)
67 Python 2.5a0: 62091 (with)
68 Python 2.5a0: 62092 (changed WITH_CLEANUP opcode)
69 Python 2.5b3: 62101 (fix wrong code: for x, in ...)
70 Python 2.5b3: 62111 (fix wrong code: x += yield)
71 Python 2.5c1: 62121 (fix wrong lnotab with for loops and
72 storing constants that should have been removed)
73 Python 2.5c2: 62131 (fix wrong code: for x, in ... in listcomp/genexp)
74 Python 2.6a0: 62151 (peephole optimizations and STORE_MAP opcode)
75 Python 2.6a1: 62161 (WITH_CLEANUP optimization)
78 #define MAGIC (62161 | ((long)'\r'<<16) | ((long)'\n'<<24))
80 /* Magic word as global; note that _PyImport_Init() can change the
81 value of this global to accommodate for alterations of how the
82 compiler works which are enabled by command line switches. */
83 static long pyc_magic
= MAGIC
;
85 /* See _PyImport_FixupExtension() below */
86 static PyObject
*extensions
= NULL
;
88 /* This table is defined in config.c: */
89 extern struct _inittab _PyImport_Inittab
[];
91 struct _inittab
*PyImport_Inittab
= _PyImport_Inittab
;
93 /* these tables define the module suffixes that Python recognizes */
94 struct filedescr
* _PyImport_Filetab
= NULL
;
97 static const struct filedescr _PyImport_StandardFiletab
[] = {
98 {"/py", "U", PY_SOURCE
},
99 {"/pyc", "rb", PY_COMPILED
},
103 static const struct filedescr _PyImport_StandardFiletab
[] = {
104 {".py", "U", PY_SOURCE
},
106 {".pyw", "U", PY_SOURCE
},
108 {".pyc", "rb", PY_COMPILED
},
114 /* Initialize things */
119 const struct filedescr
*scan
;
120 struct filedescr
*filetab
;
124 /* prepare _PyImport_Filetab: copy entries from
125 _PyImport_DynLoadFiletab and _PyImport_StandardFiletab.
127 #ifdef HAVE_DYNAMIC_LOADING
128 for (scan
= _PyImport_DynLoadFiletab
; scan
->suffix
!= NULL
; ++scan
)
131 for (scan
= _PyImport_StandardFiletab
; scan
->suffix
!= NULL
; ++scan
)
133 filetab
= PyMem_NEW(struct filedescr
, countD
+ countS
+ 1);
135 Py_FatalError("Can't initialize import file table.");
136 #ifdef HAVE_DYNAMIC_LOADING
137 memcpy(filetab
, _PyImport_DynLoadFiletab
,
138 countD
* sizeof(struct filedescr
));
140 memcpy(filetab
+ countD
, _PyImport_StandardFiletab
,
141 countS
* sizeof(struct filedescr
));
142 filetab
[countD
+ countS
].suffix
= NULL
;
144 _PyImport_Filetab
= filetab
;
146 if (Py_OptimizeFlag
) {
147 /* Replace ".pyc" with ".pyo" in _PyImport_Filetab */
148 for (; filetab
->suffix
!= NULL
; filetab
++) {
150 if (strcmp(filetab
->suffix
, ".pyc") == 0)
151 filetab
->suffix
= ".pyo";
153 if (strcmp(filetab
->suffix
, "/pyc") == 0)
154 filetab
->suffix
= "/pyo";
159 if (Py_UnicodeFlag
) {
160 /* Fix the pyc_magic so that byte compiled code created
161 using the all-Unicode method doesn't interfere with
162 code created in normal operation mode. */
163 pyc_magic
= MAGIC
+ 1;
168 _PyImportHooks_Init(void)
170 PyObject
*v
, *path_hooks
= NULL
, *zimpimport
;
173 /* adding sys.path_hooks and sys.path_importer_cache, setting up
175 if (PyType_Ready(&PyNullImporter_Type
) < 0)
179 PySys_WriteStderr("# installing zipimport hook\n");
184 err
= PySys_SetObject("meta_path", v
);
191 err
= PySys_SetObject("path_importer_cache", v
);
195 path_hooks
= PyList_New(0);
196 if (path_hooks
== NULL
)
198 err
= PySys_SetObject("path_hooks", path_hooks
);
202 Py_FatalError("initializing sys.meta_path, sys.path_hooks, "
203 "path_importer_cache, or NullImporter failed"
207 zimpimport
= PyImport_ImportModule("zipimport");
208 if (zimpimport
== NULL
) {
209 PyErr_Clear(); /* No zip import module -- okay */
211 PySys_WriteStderr("# can't import zipimport\n");
214 PyObject
*zipimporter
= PyObject_GetAttrString(zimpimport
,
216 Py_DECREF(zimpimport
);
217 if (zipimporter
== NULL
) {
218 PyErr_Clear(); /* No zipimporter object -- okay */
221 "# can't import zipimport.zipimporter\n");
224 /* sys.path_hooks.append(zipimporter) */
225 err
= PyList_Append(path_hooks
, zipimporter
);
226 Py_DECREF(zipimporter
);
231 "# installed zipimport hook\n");
234 Py_DECREF(path_hooks
);
240 Py_XDECREF(extensions
);
242 PyMem_DEL(_PyImport_Filetab
);
243 _PyImport_Filetab
= NULL
;
247 /* Locking primitives to prevent parallel imports of the same module
248 in different threads to return with a partially loaded module.
249 These calls are serialized by the global interpreter lock. */
253 #include "pythread.h"
255 static PyThread_type_lock import_lock
= 0;
256 static long import_lock_thread
= -1;
257 static int import_lock_level
= 0;
262 long me
= PyThread_get_thread_ident();
264 return; /* Too bad */
265 if (import_lock
== NULL
) {
266 import_lock
= PyThread_allocate_lock();
267 if (import_lock
== NULL
)
268 return; /* Nothing much we can do. */
270 if (import_lock_thread
== me
) {
274 if (import_lock_thread
!= -1 || !PyThread_acquire_lock(import_lock
, 0))
276 PyThreadState
*tstate
= PyEval_SaveThread();
277 PyThread_acquire_lock(import_lock
, 1);
278 PyEval_RestoreThread(tstate
);
280 import_lock_thread
= me
;
281 import_lock_level
= 1;
287 long me
= PyThread_get_thread_ident();
288 if (me
== -1 || import_lock
== NULL
)
289 return 0; /* Too bad */
290 if (import_lock_thread
!= me
)
293 if (import_lock_level
== 0) {
294 import_lock_thread
= -1;
295 PyThread_release_lock(import_lock
);
300 /* This function is called from PyOS_AfterFork to ensure that newly
301 created child processes do not share locks with the parent. */
304 _PyImport_ReInitLock(void)
307 if (import_lock
!= NULL
)
308 import_lock
= PyThread_allocate_lock();
314 #define lock_import()
315 #define unlock_import() 0
320 imp_lock_held(PyObject
*self
, PyObject
*noargs
)
323 return PyBool_FromLong(import_lock_thread
!= -1);
325 return PyBool_FromLong(0);
330 imp_acquire_lock(PyObject
*self
, PyObject
*noargs
)
340 imp_release_lock(PyObject
*self
, PyObject
*noargs
)
343 if (unlock_import() < 0) {
344 PyErr_SetString(PyExc_RuntimeError
,
345 "not holding the import lock");
354 imp_modules_reloading_clear(void)
356 PyInterpreterState
*interp
= PyThreadState_Get()->interp
;
357 if (interp
->modules_reloading
!= NULL
)
358 PyDict_Clear(interp
->modules_reloading
);
364 PyImport_GetModuleDict(void)
366 PyInterpreterState
*interp
= PyThreadState_GET()->interp
;
367 if (interp
->modules
== NULL
)
368 Py_FatalError("PyImport_GetModuleDict: no module dictionary!");
369 return interp
->modules
;
373 /* List of names to clear in sys */
374 static char* sys_deletes
[] = {
375 "path", "argv", "ps1", "ps2", "exitfunc",
376 "exc_type", "exc_value", "exc_traceback",
377 "last_type", "last_value", "last_traceback",
378 "path_hooks", "path_importer_cache", "meta_path",
380 "flags", "float_info",
384 static char* sys_files
[] = {
385 "stdin", "__stdin__",
386 "stdout", "__stdout__",
387 "stderr", "__stderr__",
392 /* Un-initialize things, as good as we can */
395 PyImport_Cleanup(void)
397 Py_ssize_t pos
, ndone
;
399 PyObject
*key
, *value
, *dict
;
400 PyInterpreterState
*interp
= PyThreadState_GET()->interp
;
401 PyObject
*modules
= interp
->modules
;
404 return; /* Already done */
406 /* Delete some special variables first. These are common
407 places where user values hide and people complain when their
408 destructors fail. Since the modules containing them are
409 deleted *last* of all, they would come too late in the normal
410 destruction order. Sigh. */
412 value
= PyDict_GetItemString(modules
, "__builtin__");
413 if (value
!= NULL
&& PyModule_Check(value
)) {
414 dict
= PyModule_GetDict(value
);
416 PySys_WriteStderr("# clear __builtin__._\n");
417 PyDict_SetItemString(dict
, "_", Py_None
);
419 value
= PyDict_GetItemString(modules
, "sys");
420 if (value
!= NULL
&& PyModule_Check(value
)) {
423 dict
= PyModule_GetDict(value
);
424 for (p
= sys_deletes
; *p
!= NULL
; p
++) {
426 PySys_WriteStderr("# clear sys.%s\n", *p
);
427 PyDict_SetItemString(dict
, *p
, Py_None
);
429 for (p
= sys_files
; *p
!= NULL
; p
+=2) {
431 PySys_WriteStderr("# restore sys.%s\n", *p
);
432 v
= PyDict_GetItemString(dict
, *(p
+1));
435 PyDict_SetItemString(dict
, *p
, v
);
439 /* First, delete __main__ */
440 value
= PyDict_GetItemString(modules
, "__main__");
441 if (value
!= NULL
&& PyModule_Check(value
)) {
443 PySys_WriteStderr("# cleanup __main__\n");
444 _PyModule_Clear(value
);
445 PyDict_SetItemString(modules
, "__main__", Py_None
);
448 /* The special treatment of __builtin__ here is because even
449 when it's not referenced as a module, its dictionary is
450 referenced by almost every module's __builtins__. Since
451 deleting a module clears its dictionary (even if there are
452 references left to it), we need to delete the __builtin__
453 module last. Likewise, we don't delete sys until the very
454 end because it is implicitly referenced (e.g. by print).
456 Also note that we 'delete' modules by replacing their entry
457 in the modules dict with None, rather than really deleting
458 them; this avoids a rehash of the modules dictionary and
459 also marks them as "non existent" so they won't be
462 /* Next, repeatedly delete modules with a reference count of
463 one (skipping __builtin__ and sys) and delete them */
467 while (PyDict_Next(modules
, &pos
, &key
, &value
)) {
468 if (value
->ob_refcnt
!= 1)
470 if (PyString_Check(key
) && PyModule_Check(value
)) {
471 name
= PyString_AS_STRING(key
);
472 if (strcmp(name
, "__builtin__") == 0)
474 if (strcmp(name
, "sys") == 0)
478 "# cleanup[1] %s\n", name
);
479 _PyModule_Clear(value
);
480 PyDict_SetItem(modules
, key
, Py_None
);
486 /* Next, delete all modules (still skipping __builtin__ and sys) */
488 while (PyDict_Next(modules
, &pos
, &key
, &value
)) {
489 if (PyString_Check(key
) && PyModule_Check(value
)) {
490 name
= PyString_AS_STRING(key
);
491 if (strcmp(name
, "__builtin__") == 0)
493 if (strcmp(name
, "sys") == 0)
496 PySys_WriteStderr("# cleanup[2] %s\n", name
);
497 _PyModule_Clear(value
);
498 PyDict_SetItem(modules
, key
, Py_None
);
502 /* Next, delete sys and __builtin__ (in that order) */
503 value
= PyDict_GetItemString(modules
, "sys");
504 if (value
!= NULL
&& PyModule_Check(value
)) {
506 PySys_WriteStderr("# cleanup sys\n");
507 _PyModule_Clear(value
);
508 PyDict_SetItemString(modules
, "sys", Py_None
);
510 value
= PyDict_GetItemString(modules
, "__builtin__");
511 if (value
!= NULL
&& PyModule_Check(value
)) {
513 PySys_WriteStderr("# cleanup __builtin__\n");
514 _PyModule_Clear(value
);
515 PyDict_SetItemString(modules
, "__builtin__", Py_None
);
518 /* Finally, clear and delete the modules directory */
519 PyDict_Clear(modules
);
520 interp
->modules
= NULL
;
522 Py_CLEAR(interp
->modules_reloading
);
526 /* Helper for pythonrun.c -- return magic number */
529 PyImport_GetMagicNumber(void)
535 /* Magic for extension modules (built-in as well as dynamically
536 loaded). To prevent initializing an extension module more than
537 once, we keep a static dictionary 'extensions' keyed by module name
538 (for built-in modules) or by filename (for dynamically loaded
539 modules), containing these modules. A copy of the module's
540 dictionary is stored by calling _PyImport_FixupExtension()
541 immediately after the module initialization function succeeds. A
542 copy can be retrieved from there by calling
543 _PyImport_FindExtension(). */
546 _PyImport_FixupExtension(char *name
, char *filename
)
548 PyObject
*modules
, *mod
, *dict
, *copy
;
549 if (extensions
== NULL
) {
550 extensions
= PyDict_New();
551 if (extensions
== NULL
)
554 modules
= PyImport_GetModuleDict();
555 mod
= PyDict_GetItemString(modules
, name
);
556 if (mod
== NULL
|| !PyModule_Check(mod
)) {
557 PyErr_Format(PyExc_SystemError
,
558 "_PyImport_FixupExtension: module %.200s not loaded", name
);
561 dict
= PyModule_GetDict(mod
);
564 copy
= PyDict_Copy(dict
);
567 PyDict_SetItemString(extensions
, filename
, copy
);
573 _PyImport_FindExtension(char *name
, char *filename
)
575 PyObject
*dict
, *mod
, *mdict
;
576 if (extensions
== NULL
)
578 dict
= PyDict_GetItemString(extensions
, filename
);
581 mod
= PyImport_AddModule(name
);
584 mdict
= PyModule_GetDict(mod
);
587 if (PyDict_Update(mdict
, dict
))
590 PySys_WriteStderr("import %s # previously loaded (%s)\n",
596 /* Get the module object corresponding to a module name.
597 First check the modules dictionary if there's one there,
598 if not, create a new one and insert it in the modules dictionary.
599 Because the former action is most common, THIS DOES NOT RETURN A
603 PyImport_AddModule(const char *name
)
605 PyObject
*modules
= PyImport_GetModuleDict();
608 if ((m
= PyDict_GetItemString(modules
, name
)) != NULL
&&
611 m
= PyModule_New(name
);
614 if (PyDict_SetItemString(modules
, name
, m
) != 0) {
618 Py_DECREF(m
); /* Yes, it still exists, in modules! */
623 /* Remove name from sys.modules, if it's there. */
625 _RemoveModule(const char *name
)
627 PyObject
*modules
= PyImport_GetModuleDict();
628 if (PyDict_GetItemString(modules
, name
) == NULL
)
630 if (PyDict_DelItemString(modules
, name
) < 0)
631 Py_FatalError("import: deleting existing key in"
632 "sys.modules failed");
635 /* Execute a code object in a module and return the module object
636 * WITH INCREMENTED REFERENCE COUNT. If an error occurs, name is
637 * removed from sys.modules, to avoid leaving damaged module objects
638 * in sys.modules. The caller may wish to restore the original
639 * module object (if any) in this case; PyImport_ReloadModule is an
643 PyImport_ExecCodeModule(char *name
, PyObject
*co
)
645 return PyImport_ExecCodeModuleEx(name
, co
, (char *)NULL
);
649 PyImport_ExecCodeModuleEx(char *name
, PyObject
*co
, char *pathname
)
651 PyObject
*modules
= PyImport_GetModuleDict();
654 m
= PyImport_AddModule(name
);
657 /* If the module is being reloaded, we get the old module back
658 and re-use its dict to exec the new code. */
659 d
= PyModule_GetDict(m
);
660 if (PyDict_GetItemString(d
, "__builtins__") == NULL
) {
661 if (PyDict_SetItemString(d
, "__builtins__",
662 PyEval_GetBuiltins()) != 0)
665 /* Remember the filename as the __file__ attribute */
667 if (pathname
!= NULL
) {
668 v
= PyString_FromString(pathname
);
673 v
= ((PyCodeObject
*)co
)->co_filename
;
676 if (PyDict_SetItemString(d
, "__file__", v
) != 0)
677 PyErr_Clear(); /* Not important enough to report */
680 v
= PyEval_EvalCode((PyCodeObject
*)co
, d
, d
);
685 if ((m
= PyDict_GetItemString(modules
, name
)) == NULL
) {
686 PyErr_Format(PyExc_ImportError
,
687 "Loaded module %.200s not found in sys.modules",
702 /* Given a pathname for a Python source file, fill a buffer with the
703 pathname for the corresponding compiled file. Return the pathname
704 for the compiled file, or NULL if there's no space in the buffer.
705 Doesn't set an exception. */
708 make_compiled_pathname(char *pathname
, char *buf
, size_t buflen
)
710 size_t len
= strlen(pathname
);
715 /* Treat .pyw as if it were .py. The case of ".pyw" must match
716 that used in _PyImport_StandardFiletab. */
717 if (len
>= 4 && strcmp(&pathname
[len
-4], ".pyw") == 0)
718 --len
; /* pretend 'w' isn't there */
720 memcpy(buf
, pathname
, len
);
721 buf
[len
] = Py_OptimizeFlag
? 'o' : 'c';
728 /* Given a pathname for a Python source file, its time of last
729 modification, and a pathname for a compiled file, check whether the
730 compiled file represents the same version of the source. If so,
731 return a FILE pointer for the compiled file, positioned just after
732 the header; if not, return NULL.
733 Doesn't set an exception. */
736 check_compiled_module(char *pathname
, time_t mtime
, char *cpathname
)
742 fp
= fopen(cpathname
, "rb");
745 magic
= PyMarshal_ReadLongFromFile(fp
);
746 if (magic
!= pyc_magic
) {
748 PySys_WriteStderr("# %s has bad magic\n", cpathname
);
752 pyc_mtime
= PyMarshal_ReadLongFromFile(fp
);
753 if (pyc_mtime
!= mtime
) {
755 PySys_WriteStderr("# %s has bad mtime\n", cpathname
);
760 PySys_WriteStderr("# %s matches %s\n", cpathname
, pathname
);
765 /* Read a code object from a file and check it for validity */
767 static PyCodeObject
*
768 read_compiled_module(char *cpathname
, FILE *fp
)
772 co
= PyMarshal_ReadLastObjectFromFile(fp
);
775 if (!PyCode_Check(co
)) {
776 PyErr_Format(PyExc_ImportError
,
777 "Non-code object in %.200s", cpathname
);
781 return (PyCodeObject
*)co
;
785 /* Load a module from a compiled file, execute it, and return its
786 module object WITH INCREMENTED REFERENCE COUNT */
789 load_compiled_module(char *name
, char *cpathname
, FILE *fp
)
795 magic
= PyMarshal_ReadLongFromFile(fp
);
796 if (magic
!= pyc_magic
) {
797 PyErr_Format(PyExc_ImportError
,
798 "Bad magic number in %.200s", cpathname
);
801 (void) PyMarshal_ReadLongFromFile(fp
);
802 co
= read_compiled_module(cpathname
, fp
);
806 PySys_WriteStderr("import %s # precompiled from %s\n",
808 m
= PyImport_ExecCodeModuleEx(name
, (PyObject
*)co
, cpathname
);
814 /* Parse a source file and return the corresponding code object */
816 static PyCodeObject
*
817 parse_source_module(const char *pathname
, FILE *fp
)
819 PyCodeObject
*co
= NULL
;
821 PyCompilerFlags flags
;
822 PyArena
*arena
= PyArena_New();
828 mod
= PyParser_ASTFromFile(fp
, pathname
, Py_file_input
, 0, 0, &flags
,
831 co
= PyAST_Compile(mod
, pathname
, NULL
, arena
);
838 /* Helper to open a bytecode file for writing in exclusive mode */
841 open_exclusive(char *filename
, mode_t mode
)
843 #if defined(O_EXCL)&&defined(O_CREAT)&&defined(O_WRONLY)&&defined(O_TRUNC)
844 /* Use O_EXCL to avoid a race condition when another process tries to
845 write the same file. When that happens, our open() call fails,
846 which is just fine (since it's only a cache).
847 XXX If the file exists and is writable but the directory is not
848 writable, the file will never be written. Oh well.
851 (void) unlink(filename
);
852 fd
= open(filename
, O_EXCL
|O_CREAT
|O_WRONLY
|O_TRUNC
854 |O_BINARY
/* necessary for Windows */
857 , mode
, "ctxt=bin", "shr=nil"
864 return fdopen(fd
, "wb");
866 /* Best we can do -- on Windows this can't happen anyway */
867 return fopen(filename
, "wb");
872 /* Write a compiled module to a file, placing the time of last
873 modification of its source into the header.
874 Errors are ignored, if a write error occurs an attempt is made to
878 write_compiled_module(PyCodeObject
*co
, char *cpathname
, struct stat
*srcstat
)
881 time_t mtime
= srcstat
->st_mtime
;
882 mode_t mode
= srcstat
->st_mode
;
884 fp
= open_exclusive(cpathname
, mode
);
888 "# can't create %s\n", cpathname
);
891 PyMarshal_WriteLongToFile(pyc_magic
, fp
, Py_MARSHAL_VERSION
);
892 /* First write a 0 for mtime */
893 PyMarshal_WriteLongToFile(0L, fp
, Py_MARSHAL_VERSION
);
894 PyMarshal_WriteObjectToFile((PyObject
*)co
, fp
, Py_MARSHAL_VERSION
);
895 if (fflush(fp
) != 0 || ferror(fp
)) {
897 PySys_WriteStderr("# can't write %s\n", cpathname
);
898 /* Don't keep partial file */
900 (void) unlink(cpathname
);
903 /* Now write the true mtime */
905 assert(mtime
< LONG_MAX
);
906 PyMarshal_WriteLongToFile((long)mtime
, fp
, Py_MARSHAL_VERSION
);
910 PySys_WriteStderr("# wrote %s\n", cpathname
);
914 /* Load a source module from a given file and return its module
915 object WITH INCREMENTED REFERENCE COUNT. If there's a matching
916 byte-compiled file, use that instead. */
919 load_source_module(char *name
, char *pathname
, FILE *fp
)
923 char buf
[MAXPATHLEN
+1];
928 if (fstat(fileno(fp
), &st
) != 0) {
929 PyErr_Format(PyExc_RuntimeError
,
930 "unable to get file status from '%s'",
934 #if SIZEOF_TIME_T > 4
935 /* Python's .pyc timestamp handling presumes that the timestamp fits
936 in 4 bytes. This will be fine until sometime in the year 2038,
937 when a 4-byte signed time_t will overflow.
939 if (st
.st_mtime
>> 32) {
940 PyErr_SetString(PyExc_OverflowError
,
941 "modification time overflows a 4 byte field");
945 cpathname
= make_compiled_pathname(pathname
, buf
,
946 (size_t)MAXPATHLEN
+ 1);
947 if (cpathname
!= NULL
&&
948 (fpc
= check_compiled_module(pathname
, st
.st_mtime
, cpathname
))) {
949 co
= read_compiled_module(cpathname
, fpc
);
954 PySys_WriteStderr("import %s # precompiled from %s\n",
956 pathname
= cpathname
;
959 co
= parse_source_module(pathname
, fp
);
963 PySys_WriteStderr("import %s # from %s\n",
966 PyObject
*ro
= PySys_GetObject("dont_write_bytecode");
967 if (ro
== NULL
|| !PyObject_IsTrue(ro
))
968 write_compiled_module(co
, cpathname
, &st
);
971 m
= PyImport_ExecCodeModuleEx(name
, (PyObject
*)co
, pathname
);
979 static PyObject
*load_module(char *, FILE *, char *, int, PyObject
*);
980 static struct filedescr
*find_module(char *, char *, PyObject
*,
981 char *, size_t, FILE **, PyObject
**);
982 static struct _frozen
*find_frozen(char *name
);
984 /* Load a package and return its module object WITH INCREMENTED
988 load_package(char *name
, char *pathname
)
991 PyObject
*file
= NULL
;
992 PyObject
*path
= NULL
;
994 char buf
[MAXPATHLEN
+1];
996 struct filedescr
*fdp
;
998 m
= PyImport_AddModule(name
);
1002 PySys_WriteStderr("import %s # directory %s\n",
1004 d
= PyModule_GetDict(m
);
1005 file
= PyString_FromString(pathname
);
1008 path
= Py_BuildValue("[O]", file
);
1011 err
= PyDict_SetItemString(d
, "__file__", file
);
1013 err
= PyDict_SetItemString(d
, "__path__", path
);
1017 fdp
= find_module(name
, "__init__", path
, buf
, sizeof(buf
), &fp
, NULL
);
1019 if (PyErr_ExceptionMatches(PyExc_ImportError
)) {
1027 m
= load_module(name
, fp
, buf
, fdp
->type
, NULL
);
1041 /* Helper to test for built-in module */
1044 is_builtin(char *name
)
1047 for (i
= 0; PyImport_Inittab
[i
].name
!= NULL
; i
++) {
1048 if (strcmp(name
, PyImport_Inittab
[i
].name
) == 0) {
1049 if (PyImport_Inittab
[i
].initfunc
== NULL
)
1059 /* Return an importer object for a sys.path/pkg.__path__ item 'p',
1060 possibly by fetching it from the path_importer_cache dict. If it
1061 wasn't yet cached, traverse path_hooks until a hook is found
1062 that can handle the path item. Return None if no hook could;
1063 this tells our caller it should fall back to the builtin
1064 import mechanism. Cache the result in path_importer_cache.
1065 Returns a borrowed reference. */
1068 get_path_importer(PyObject
*path_importer_cache
, PyObject
*path_hooks
,
1072 Py_ssize_t j
, nhooks
;
1074 /* These conditions are the caller's responsibility: */
1075 assert(PyList_Check(path_hooks
));
1076 assert(PyDict_Check(path_importer_cache
));
1078 nhooks
= PyList_Size(path_hooks
);
1080 return NULL
; /* Shouldn't happen */
1082 importer
= PyDict_GetItem(path_importer_cache
, p
);
1083 if (importer
!= NULL
)
1086 /* set path_importer_cache[p] to None to avoid recursion */
1087 if (PyDict_SetItem(path_importer_cache
, p
, Py_None
) != 0)
1090 for (j
= 0; j
< nhooks
; j
++) {
1091 PyObject
*hook
= PyList_GetItem(path_hooks
, j
);
1094 importer
= PyObject_CallFunctionObjArgs(hook
, p
, NULL
);
1095 if (importer
!= NULL
)
1098 if (!PyErr_ExceptionMatches(PyExc_ImportError
)) {
1103 if (importer
== NULL
) {
1104 importer
= PyObject_CallFunctionObjArgs(
1105 (PyObject
*)&PyNullImporter_Type
, p
, NULL
1107 if (importer
== NULL
) {
1108 if (PyErr_ExceptionMatches(PyExc_ImportError
)) {
1114 if (importer
!= NULL
) {
1115 int err
= PyDict_SetItem(path_importer_cache
, p
, importer
);
1116 Py_DECREF(importer
);
1123 PyAPI_FUNC(PyObject
*)
1124 PyImport_GetImporter(PyObject
*path
) {
1125 PyObject
*importer
=NULL
, *path_importer_cache
=NULL
, *path_hooks
=NULL
;
1127 if ((path_importer_cache
= PySys_GetObject("path_importer_cache"))) {
1128 if ((path_hooks
= PySys_GetObject("path_hooks"))) {
1129 importer
= get_path_importer(path_importer_cache
,
1133 Py_XINCREF(importer
); /* get_path_importer returns a borrowed reference */
1137 /* Search the path (default sys.path) for a module. Return the
1138 corresponding filedescr struct, and (via return arguments) the
1139 pathname and an open file. Return NULL if the module is not found. */
1142 extern FILE *PyWin_FindRegisteredModule(const char *, struct filedescr
**,
1143 char *, Py_ssize_t
);
1146 static int case_ok(char *, Py_ssize_t
, Py_ssize_t
, char *);
1147 static int find_init_module(char *); /* Forward */
1148 static struct filedescr importhookdescr
= {"", "", IMP_HOOK
};
1150 static struct filedescr
*
1151 find_module(char *fullname
, char *subname
, PyObject
*path
, char *buf
,
1152 size_t buflen
, FILE **p_fp
, PyObject
**p_loader
)
1154 Py_ssize_t i
, npath
;
1155 size_t len
, namelen
;
1156 struct filedescr
*fdp
= NULL
;
1159 PyObject
*path_hooks
, *path_importer_cache
;
1161 struct stat statbuf
;
1163 static struct filedescr fd_frozen
= {"", "", PY_FROZEN
};
1164 static struct filedescr fd_builtin
= {"", "", C_BUILTIN
};
1165 static struct filedescr fd_package
= {"", "", PKG_DIRECTORY
};
1166 char name
[MAXPATHLEN
+1];
1167 #if defined(PYOS_OS2)
1169 size_t saved_namelen
;
1170 char *saved_buf
= NULL
;
1172 if (p_loader
!= NULL
)
1175 if (strlen(subname
) > MAXPATHLEN
) {
1176 PyErr_SetString(PyExc_OverflowError
,
1177 "module name is too long");
1180 strcpy(name
, subname
);
1182 /* sys.meta_path import hook */
1183 if (p_loader
!= NULL
) {
1184 PyObject
*meta_path
;
1186 meta_path
= PySys_GetObject("meta_path");
1187 if (meta_path
== NULL
|| !PyList_Check(meta_path
)) {
1188 PyErr_SetString(PyExc_ImportError
,
1189 "sys.meta_path must be a list of "
1193 Py_INCREF(meta_path
); /* zap guard */
1194 npath
= PyList_Size(meta_path
);
1195 for (i
= 0; i
< npath
; i
++) {
1197 PyObject
*hook
= PyList_GetItem(meta_path
, i
);
1198 loader
= PyObject_CallMethod(hook
, "find_module",
1202 if (loader
== NULL
) {
1203 Py_DECREF(meta_path
);
1204 return NULL
; /* true error */
1206 if (loader
!= Py_None
) {
1207 /* a loader was found */
1209 Py_DECREF(meta_path
);
1210 return &importhookdescr
;
1214 Py_DECREF(meta_path
);
1217 if (path
!= NULL
&& PyString_Check(path
)) {
1218 /* The only type of submodule allowed inside a "frozen"
1219 package are other frozen modules or packages. */
1220 if (PyString_Size(path
) + 1 + strlen(name
) >= (size_t)buflen
) {
1221 PyErr_SetString(PyExc_ImportError
,
1222 "full frozen module name too long");
1225 strcpy(buf
, PyString_AsString(path
));
1229 if (find_frozen(name
) != NULL
) {
1233 PyErr_Format(PyExc_ImportError
,
1234 "No frozen submodule named %.200s", name
);
1238 if (is_builtin(name
)) {
1242 if ((find_frozen(name
)) != NULL
) {
1248 fp
= PyWin_FindRegisteredModule(name
, &fdp
, buf
, buflen
);
1254 path
= PySys_GetObject("path");
1256 if (path
== NULL
|| !PyList_Check(path
)) {
1257 PyErr_SetString(PyExc_ImportError
,
1258 "sys.path must be a list of directory names");
1262 path_hooks
= PySys_GetObject("path_hooks");
1263 if (path_hooks
== NULL
|| !PyList_Check(path_hooks
)) {
1264 PyErr_SetString(PyExc_ImportError
,
1265 "sys.path_hooks must be a list of "
1269 path_importer_cache
= PySys_GetObject("path_importer_cache");
1270 if (path_importer_cache
== NULL
||
1271 !PyDict_Check(path_importer_cache
)) {
1272 PyErr_SetString(PyExc_ImportError
,
1273 "sys.path_importer_cache must be a dict");
1277 npath
= PyList_Size(path
);
1278 namelen
= strlen(name
);
1279 for (i
= 0; i
< npath
; i
++) {
1280 PyObject
*copy
= NULL
;
1281 PyObject
*v
= PyList_GetItem(path
, i
);
1284 #ifdef Py_USING_UNICODE
1285 if (PyUnicode_Check(v
)) {
1286 copy
= PyUnicode_Encode(PyUnicode_AS_UNICODE(v
),
1287 PyUnicode_GET_SIZE(v
), Py_FileSystemDefaultEncoding
, NULL
);
1294 if (!PyString_Check(v
))
1296 len
= PyString_GET_SIZE(v
);
1297 if (len
+ 2 + namelen
+ MAXSUFFIXSIZE
>= buflen
) {
1299 continue; /* Too long */
1301 strcpy(buf
, PyString_AS_STRING(v
));
1302 if (strlen(buf
) != len
) {
1304 continue; /* v contains '\0' */
1307 /* sys.path_hooks import hook */
1308 if (p_loader
!= NULL
) {
1311 importer
= get_path_importer(path_importer_cache
,
1313 if (importer
== NULL
) {
1317 /* Note: importer is a borrowed reference */
1318 if (importer
!= Py_None
) {
1320 loader
= PyObject_CallMethod(importer
,
1325 return NULL
; /* error */
1326 if (loader
!= Py_None
) {
1327 /* a loader was found */
1329 return &importhookdescr
;
1335 /* no hook was found, use builtin import */
1337 if (len
> 0 && buf
[len
-1] != SEP
1339 && buf
[len
-1] != ALTSEP
1343 strcpy(buf
+len
, name
);
1346 /* Check for package import (buf holds a directory name,
1347 and there's an __init__ module in that directory */
1349 if (stat(buf
, &statbuf
) == 0 && /* it exists */
1350 S_ISDIR(statbuf
.st_mode
) && /* it's a directory */
1351 case_ok(buf
, len
, namelen
, name
)) { /* case matches */
1352 if (find_init_module(buf
)) { /* and has __init__.py */
1357 char warnstr
[MAXPATHLEN
+80];
1358 sprintf(warnstr
, "Not importing directory "
1359 "'%.*s': missing __init__.py",
1361 if (PyErr_Warn(PyExc_ImportWarning
,
1369 /* XXX How are you going to test for directories? */
1372 case_ok(buf
, len
, namelen
, name
)) {
1373 if (find_init_module(buf
)) {
1378 char warnstr
[MAXPATHLEN
+80];
1379 sprintf(warnstr
, "Not importing directory "
1380 "'%.*s': missing __init__.py",
1382 if (PyErr_Warn(PyExc_ImportWarning
,
1390 #if defined(PYOS_OS2)
1391 /* take a snapshot of the module spec for restoration
1392 * after the 8 character DLL hackery
1394 saved_buf
= strdup(buf
);
1396 saved_namelen
= namelen
;
1397 #endif /* PYOS_OS2 */
1398 for (fdp
= _PyImport_Filetab
; fdp
->suffix
!= NULL
; fdp
++) {
1399 #if defined(PYOS_OS2) && defined(HAVE_DYNAMIC_LOADING)
1400 /* OS/2 limits DLLs to 8 character names (w/o
1402 * so if the name is longer than that and its a
1403 * dynamically loaded module we're going to try,
1404 * truncate the name before trying
1406 if (strlen(subname
) > 8) {
1407 /* is this an attempt to load a C extension? */
1408 const struct filedescr
*scan
;
1409 scan
= _PyImport_DynLoadFiletab
;
1410 while (scan
->suffix
!= NULL
) {
1411 if (!strcmp(scan
->suffix
, fdp
->suffix
))
1416 if (scan
->suffix
!= NULL
) {
1417 /* yes, so truncate the name */
1419 len
-= strlen(subname
) - namelen
;
1423 #endif /* PYOS_OS2 */
1424 strcpy(buf
+len
, fdp
->suffix
);
1425 if (Py_VerboseFlag
> 1)
1426 PySys_WriteStderr("# trying %s\n", buf
);
1427 filemode
= fdp
->mode
;
1428 if (filemode
[0] == 'U')
1429 filemode
= "r" PY_STDIOTEXTMODE
;
1430 fp
= fopen(buf
, filemode
);
1432 if (case_ok(buf
, len
, namelen
, name
))
1434 else { /* continue search */
1439 #if defined(PYOS_OS2)
1440 /* restore the saved snapshot */
1441 strcpy(buf
, saved_buf
);
1443 namelen
= saved_namelen
;
1446 #if defined(PYOS_OS2)
1447 /* don't need/want the module name snapshot anymore */
1459 PyErr_Format(PyExc_ImportError
,
1460 "No module named %.200s", name
);
1467 /* Helpers for main.c
1468 * Find the source file corresponding to a named module
1471 _PyImport_FindModule(const char *name
, PyObject
*path
, char *buf
,
1472 size_t buflen
, FILE **p_fp
, PyObject
**p_loader
)
1474 return find_module((char *) name
, (char *) name
, path
,
1475 buf
, buflen
, p_fp
, p_loader
);
1478 PyAPI_FUNC(int) _PyImport_IsScript(struct filedescr
* fd
)
1480 return fd
->type
== PY_SOURCE
|| fd
->type
== PY_COMPILED
;
1483 /* case_ok(char* buf, Py_ssize_t len, Py_ssize_t namelen, char* name)
1484 * The arguments here are tricky, best shown by example:
1485 * /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0
1487 * |--------------------- buf ---------------------|
1488 * |------------------- len ------------------|
1489 * |------ name -------|
1490 * |----- namelen -----|
1491 * buf is the full path, but len only counts up to (& exclusive of) the
1492 * extension. name is the module name, also exclusive of extension.
1494 * We've already done a successful stat() or fopen() on buf, so know that
1495 * there's some match, possibly case-insensitive.
1497 * case_ok() is to return 1 if there's a case-sensitive match for
1498 * name, else 0. case_ok() is also to return 1 if envar PYTHONCASEOK
1501 * case_ok() is used to implement case-sensitive import semantics even
1502 * on platforms with case-insensitive filesystems. It's trivial to implement
1503 * for case-sensitive filesystems. It's pretty much a cross-platform
1504 * nightmare for systems with case-insensitive filesystems.
1507 /* First we may need a pile of platform-specific header files; the sequence
1508 * of #if's here should match the sequence in the body of case_ok().
1510 #if defined(MS_WINDOWS)
1511 #include <windows.h>
1513 #elif defined(DJGPP)
1516 #elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
1517 #include <sys/types.h>
1520 #elif defined(PYOS_OS2)
1522 #define INCL_DOSERRORS
1523 #define INCL_NOPMAPI
1526 #elif defined(RISCOS)
1527 #include "oslib/osfscontrol.h"
1531 case_ok(char *buf
, Py_ssize_t len
, Py_ssize_t namelen
, char *name
)
1533 /* Pick a platform-specific implementation; the sequence of #if's here should
1534 * match the sequence just above.
1538 #if defined(MS_WINDOWS)
1539 WIN32_FIND_DATA data
;
1542 if (Py_GETENV("PYTHONCASEOK") != NULL
)
1545 h
= FindFirstFile(buf
, &data
);
1546 if (h
== INVALID_HANDLE_VALUE
) {
1547 PyErr_Format(PyExc_NameError
,
1548 "Can't find file for module %.100s\n(filename %.300s)",
1553 return strncmp(data
.cFileName
, name
, namelen
) == 0;
1556 #elif defined(DJGPP)
1560 if (Py_GETENV("PYTHONCASEOK") != NULL
)
1563 done
= findfirst(buf
, &ffblk
, FA_ARCH
|FA_RDONLY
|FA_HIDDEN
|FA_DIREC
);
1565 PyErr_Format(PyExc_NameError
,
1566 "Can't find file for module %.100s\n(filename %.300s)",
1570 return strncmp(ffblk
.ff_name
, name
, namelen
) == 0;
1572 /* new-fangled macintosh (macosx) or Cygwin */
1573 #elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
1576 char dirname
[MAXPATHLEN
+ 1];
1577 const int dirlen
= len
- namelen
- 1; /* don't want trailing SEP */
1579 if (Py_GETENV("PYTHONCASEOK") != NULL
)
1582 /* Copy the dir component into dirname; substitute "." if empty */
1588 assert(dirlen
<= MAXPATHLEN
);
1589 memcpy(dirname
, buf
, dirlen
);
1590 dirname
[dirlen
] = '\0';
1592 /* Open the directory and search the entries for an exact match. */
1593 dirp
= opendir(dirname
);
1595 char *nameWithExt
= buf
+ len
- namelen
;
1596 while ((dp
= readdir(dirp
)) != NULL
) {
1598 #ifdef _DIRENT_HAVE_D_NAMELEN
1603 if (thislen
>= namelen
&&
1604 strcmp(dp
->d_name
, nameWithExt
) == 0) {
1605 (void)closedir(dirp
);
1606 return 1; /* Found */
1609 (void)closedir(dirp
);
1611 return 0 ; /* Not found */
1614 #elif defined(RISCOS)
1615 char canon
[MAXPATHLEN
+1]; /* buffer for the canonical form of the path */
1616 char buf2
[MAXPATHLEN
+2];
1617 char *nameWithExt
= buf
+len
-namelen
;
1621 if (Py_GETENV("PYTHONCASEOK") != NULL
)
1625 append wildcard, otherwise case of filename wouldn't be touched */
1629 e
= xosfscontrol_canonicalise_path(buf2
,canon
,0,0,MAXPATHLEN
+1,&canonlen
);
1630 canonlen
= MAXPATHLEN
+1-canonlen
;
1631 if (e
|| canonlen
<=0 || canonlen
>(MAXPATHLEN
+1) )
1633 if (strcmp(nameWithExt
, canon
+canonlen
-strlen(nameWithExt
))==0)
1634 return 1; /* match */
1639 #elif defined(PYOS_OS2)
1645 if (Py_GETENV("PYTHONCASEOK") != NULL
)
1648 rc
= DosFindFirst(buf
,
1650 FILE_READONLY
| FILE_HIDDEN
| FILE_SYSTEM
| FILE_DIRECTORY
,
1651 &ffbuf
, sizeof(ffbuf
),
1656 return strncmp(ffbuf
.achName
, name
, namelen
) == 0;
1658 /* assuming it's a case-sensitive filesystem, so there's nothing to do! */
1667 /* Helper to look for __init__.py or __init__.py[co] in potential package */
1669 find_init_module(char *buf
)
1671 const size_t save_len
= strlen(buf
);
1672 size_t i
= save_len
;
1673 char *pname
; /* pointer to start of __init__ */
1674 struct stat statbuf
;
1676 /* For calling case_ok(buf, len, namelen, name):
1677 * /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0
1679 * |--------------------- buf ---------------------|
1680 * |------------------- len ------------------|
1681 * |------ name -------|
1682 * |----- namelen -----|
1684 if (save_len
+ 13 >= MAXPATHLEN
)
1688 strcpy(pname
, "__init__.py");
1689 if (stat(buf
, &statbuf
) == 0) {
1691 save_len
+ 9, /* len("/__init__") */
1692 8, /* len("__init__") */
1694 buf
[save_len
] = '\0';
1699 strcpy(buf
+i
, Py_OptimizeFlag
? "o" : "c");
1700 if (stat(buf
, &statbuf
) == 0) {
1702 save_len
+ 9, /* len("/__init__") */
1703 8, /* len("__init__") */
1705 buf
[save_len
] = '\0';
1709 buf
[save_len
] = '\0';
1717 find_init_module(buf
)
1720 int save_len
= strlen(buf
);
1723 if (save_len
+ 13 >= MAXPATHLEN
)
1726 strcpy(buf
+i
, "__init__/py");
1728 buf
[save_len
] = '\0';
1732 if (Py_OptimizeFlag
)
1737 buf
[save_len
] = '\0';
1740 buf
[save_len
] = '\0';
1745 #endif /* HAVE_STAT */
1748 static int init_builtin(char *); /* Forward */
1750 /* Load an external module using the default search path and return
1751 its module object WITH INCREMENTED REFERENCE COUNT */
1754 load_module(char *name
, FILE *fp
, char *buf
, int type
, PyObject
*loader
)
1760 /* First check that there's an open file (if we need one) */
1765 PyErr_Format(PyExc_ValueError
,
1766 "file object required for import (type code %d)",
1775 m
= load_source_module(name
, buf
, fp
);
1779 m
= load_compiled_module(name
, buf
, fp
);
1782 #ifdef HAVE_DYNAMIC_LOADING
1784 m
= _PyImport_LoadDynamicModule(name
, buf
, fp
);
1789 m
= load_package(name
, buf
);
1794 if (buf
!= NULL
&& buf
[0] != '\0')
1796 if (type
== C_BUILTIN
)
1797 err
= init_builtin(name
);
1799 err
= PyImport_ImportFrozenModule(name
);
1803 PyErr_Format(PyExc_ImportError
,
1804 "Purported %s module %.200s not found",
1806 "builtin" : "frozen",
1810 modules
= PyImport_GetModuleDict();
1811 m
= PyDict_GetItemString(modules
, name
);
1815 "%s module %.200s not properly initialized",
1817 "builtin" : "frozen",
1825 if (loader
== NULL
) {
1826 PyErr_SetString(PyExc_ImportError
,
1827 "import hook without loader");
1830 m
= PyObject_CallMethod(loader
, "load_module", "s", name
);
1835 PyErr_Format(PyExc_ImportError
,
1836 "Don't know how to import %.200s (type code %d)",
1846 /* Initialize a built-in module.
1847 Return 1 for success, 0 if the module is not found, and -1 with
1848 an exception set if the initialization failed. */
1851 init_builtin(char *name
)
1855 if (_PyImport_FindExtension(name
, name
) != NULL
)
1858 for (p
= PyImport_Inittab
; p
->name
!= NULL
; p
++) {
1859 if (strcmp(name
, p
->name
) == 0) {
1860 if (p
->initfunc
== NULL
) {
1861 PyErr_Format(PyExc_ImportError
,
1862 "Cannot re-init internal module %.200s",
1867 PySys_WriteStderr("import %s # builtin\n", name
);
1869 if (PyErr_Occurred())
1871 if (_PyImport_FixupExtension(name
, name
) == NULL
)
1880 /* Frozen modules */
1882 static struct _frozen
*
1883 find_frozen(char *name
)
1887 for (p
= PyImport_FrozenModules
; ; p
++) {
1888 if (p
->name
== NULL
)
1890 if (strcmp(p
->name
, name
) == 0)
1897 get_frozen_object(char *name
)
1899 struct _frozen
*p
= find_frozen(name
);
1903 PyErr_Format(PyExc_ImportError
,
1904 "No such frozen object named %.200s",
1908 if (p
->code
== NULL
) {
1909 PyErr_Format(PyExc_ImportError
,
1910 "Excluded frozen object named %.200s",
1917 return PyMarshal_ReadObjectFromString((char *)p
->code
, size
);
1920 /* Initialize a frozen module.
1921 Return 1 for succes, 0 if the module is not found, and -1 with
1922 an exception set if the initialization failed.
1923 This function is also used from frozenmain.c */
1926 PyImport_ImportFrozenModule(char *name
)
1928 struct _frozen
*p
= find_frozen(name
);
1936 if (p
->code
== NULL
) {
1937 PyErr_Format(PyExc_ImportError
,
1938 "Excluded frozen object named %.200s",
1943 ispackage
= (size
< 0);
1947 PySys_WriteStderr("import %s # frozen%s\n",
1948 name
, ispackage
? " package" : "");
1949 co
= PyMarshal_ReadObjectFromString((char *)p
->code
, size
);
1952 if (!PyCode_Check(co
)) {
1953 PyErr_Format(PyExc_TypeError
,
1954 "frozen object %.200s is not a code object",
1959 /* Set __path__ to the package name */
1962 m
= PyImport_AddModule(name
);
1965 d
= PyModule_GetDict(m
);
1966 s
= PyString_InternFromString(name
);
1969 err
= PyDict_SetItemString(d
, "__path__", s
);
1974 m
= PyImport_ExecCodeModuleEx(name
, co
, "<frozen>");
1986 /* Import a module, either built-in, frozen, or external, and return
1987 its module object WITH INCREMENTED REFERENCE COUNT */
1990 PyImport_ImportModule(const char *name
)
1995 pname
= PyString_FromString(name
);
1998 result
= PyImport_Import(pname
);
2003 /* Import a module without blocking
2005 * At first it tries to fetch the module from sys.modules. If the module was
2006 * never loaded before it loads it with PyImport_ImportModule() unless another
2007 * thread holds the import lock. In the latter case the function raises an
2008 * ImportError instead of blocking.
2010 * Returns the module object with incremented ref count.
2013 PyImport_ImportModuleNoBlock(const char *name
)
2019 /* Try to get the module from sys.modules[name] */
2020 modules
= PyImport_GetModuleDict();
2021 if (modules
== NULL
)
2024 result
= PyDict_GetItemString(modules
, name
);
2025 if (result
!= NULL
) {
2033 /* check the import lock
2034 * me might be -1 but I ignore the error here, the lock function
2035 * takes care of the problem */
2036 me
= PyThread_get_thread_ident();
2037 if (import_lock_thread
== -1 || import_lock_thread
== me
) {
2038 /* no thread or me is holding the lock */
2039 return PyImport_ImportModule(name
);
2042 PyErr_Format(PyExc_ImportError
,
2043 "Failed to import %.200s because the import lock"
2044 "is held by another thread.",
2050 /* Forward declarations for helper routines */
2051 static PyObject
*get_parent(PyObject
*globals
, char *buf
,
2052 Py_ssize_t
*p_buflen
, int level
);
2053 static PyObject
*load_next(PyObject
*mod
, PyObject
*altmod
,
2054 char **p_name
, char *buf
, Py_ssize_t
*p_buflen
);
2055 static int mark_miss(char *name
);
2056 static int ensure_fromlist(PyObject
*mod
, PyObject
*fromlist
,
2057 char *buf
, Py_ssize_t buflen
, int recursive
);
2058 static PyObject
* import_submodule(PyObject
*mod
, char *name
, char *fullname
);
2060 /* The Magnum Opus of dotted-name import :-) */
2063 import_module_level(char *name
, PyObject
*globals
, PyObject
*locals
,
2064 PyObject
*fromlist
, int level
)
2066 char buf
[MAXPATHLEN
+1];
2067 Py_ssize_t buflen
= 0;
2068 PyObject
*parent
, *head
, *next
, *tail
;
2070 if (strchr(name
, '/') != NULL
2072 || strchr(name
, '\\') != NULL
2075 PyErr_SetString(PyExc_ImportError
,
2076 "Import by filename is not supported.");
2080 parent
= get_parent(globals
, buf
, &buflen
, level
);
2084 head
= load_next(parent
, Py_None
, &name
, buf
, &buflen
);
2091 next
= load_next(tail
, tail
, &name
, buf
, &buflen
);
2099 if (tail
== Py_None
) {
2100 /* If tail is Py_None, both get_parent and load_next found
2101 an empty module name: someone called __import__("") or
2102 doctored faulty bytecode */
2105 PyErr_SetString(PyExc_ValueError
,
2106 "Empty module name");
2110 if (fromlist
!= NULL
) {
2111 if (fromlist
== Py_None
|| !PyObject_IsTrue(fromlist
))
2115 if (fromlist
== NULL
) {
2121 if (!ensure_fromlist(tail
, fromlist
, buf
, buflen
, 0)) {
2130 PyImport_ImportModuleLevel(char *name
, PyObject
*globals
, PyObject
*locals
,
2131 PyObject
*fromlist
, int level
)
2135 result
= import_module_level(name
, globals
, locals
, fromlist
, level
);
2136 if (unlock_import() < 0) {
2138 PyErr_SetString(PyExc_RuntimeError
,
2139 "not holding the import lock");
2145 /* Return the package that an import is being performed in. If globals comes
2146 from the module foo.bar.bat (not itself a package), this returns the
2147 sys.modules entry for foo.bar. If globals is from a package's __init__.py,
2148 the package's entry in sys.modules is returned, as a borrowed reference.
2150 The *name* of the returned package is returned in buf, with the length of
2151 the name in *p_buflen.
2153 If globals doesn't come from a package or a module in a package, or a
2154 corresponding entry is not found in sys.modules, Py_None is returned.
2157 get_parent(PyObject
*globals
, char *buf
, Py_ssize_t
*p_buflen
, int level
)
2159 static PyObject
*namestr
= NULL
;
2160 static PyObject
*pathstr
= NULL
;
2161 static PyObject
*pkgstr
= NULL
;
2162 PyObject
*pkgname
, *modname
, *modpath
, *modules
, *parent
;
2163 int orig_level
= level
;
2165 if (globals
== NULL
|| !PyDict_Check(globals
) || !level
)
2168 if (namestr
== NULL
) {
2169 namestr
= PyString_InternFromString("__name__");
2170 if (namestr
== NULL
)
2173 if (pathstr
== NULL
) {
2174 pathstr
= PyString_InternFromString("__path__");
2175 if (pathstr
== NULL
)
2178 if (pkgstr
== NULL
) {
2179 pkgstr
= PyString_InternFromString("__package__");
2186 pkgname
= PyDict_GetItem(globals
, pkgstr
);
2188 if ((pkgname
!= NULL
) && (pkgname
!= Py_None
)) {
2189 /* __package__ is set, so use it */
2191 if (!PyString_Check(pkgname
)) {
2192 PyErr_SetString(PyExc_ValueError
,
2193 "__package__ set to non-string");
2196 len
= PyString_GET_SIZE(pkgname
);
2199 PyErr_SetString(PyExc_ValueError
,
2200 "Attempted relative import in non-package");
2205 if (len
> MAXPATHLEN
) {
2206 PyErr_SetString(PyExc_ValueError
,
2207 "Package name too long");
2210 strcpy(buf
, PyString_AS_STRING(pkgname
));
2212 /* __package__ not set, so figure it out and set it */
2213 modname
= PyDict_GetItem(globals
, namestr
);
2214 if (modname
== NULL
|| !PyString_Check(modname
))
2217 modpath
= PyDict_GetItem(globals
, pathstr
);
2218 if (modpath
!= NULL
) {
2219 /* __path__ is set, so modname is already the package name */
2220 Py_ssize_t len
= PyString_GET_SIZE(modname
);
2222 if (len
> MAXPATHLEN
) {
2223 PyErr_SetString(PyExc_ValueError
,
2224 "Module name too long");
2227 strcpy(buf
, PyString_AS_STRING(modname
));
2228 error
= PyDict_SetItem(globals
, pkgstr
, modname
);
2230 PyErr_SetString(PyExc_ValueError
,
2231 "Could not set __package__");
2235 /* Normal module, so work out the package name if any */
2236 char *start
= PyString_AS_STRING(modname
);
2237 char *lastdot
= strrchr(start
, '.');
2240 if (lastdot
== NULL
&& level
> 0) {
2241 PyErr_SetString(PyExc_ValueError
,
2242 "Attempted relative import in non-package");
2245 if (lastdot
== NULL
) {
2246 error
= PyDict_SetItem(globals
, pkgstr
, Py_None
);
2248 PyErr_SetString(PyExc_ValueError
,
2249 "Could not set __package__");
2254 len
= lastdot
- start
;
2255 if (len
>= MAXPATHLEN
) {
2256 PyErr_SetString(PyExc_ValueError
,
2257 "Module name too long");
2260 strncpy(buf
, start
, len
);
2262 pkgname
= PyString_FromString(buf
);
2263 if (pkgname
== NULL
) {
2266 error
= PyDict_SetItem(globals
, pkgstr
, pkgname
);
2269 PyErr_SetString(PyExc_ValueError
,
2270 "Could not set __package__");
2275 while (--level
> 0) {
2276 char *dot
= strrchr(buf
, '.');
2278 PyErr_SetString(PyExc_ValueError
,
2279 "Attempted relative import beyond "
2280 "toplevel package");
2285 *p_buflen
= strlen(buf
);
2287 modules
= PyImport_GetModuleDict();
2288 parent
= PyDict_GetItemString(modules
, buf
);
2289 if (parent
== NULL
) {
2290 if (orig_level
< 1) {
2291 PyObject
*err_msg
= PyString_FromFormat(
2292 "Parent module '%.200s' not found "
2293 "while handling absolute import", buf
);
2294 if (err_msg
== NULL
) {
2297 if (!PyErr_WarnEx(PyExc_RuntimeWarning
,
2298 PyString_AsString(err_msg
), 1)) {
2305 PyErr_Format(PyExc_SystemError
,
2306 "Parent module '%.200s' not loaded, "
2307 "cannot perform relative import", buf
);
2311 /* We expect, but can't guarantee, if parent != None, that:
2312 - parent.__name__ == buf
2313 - parent.__dict__ is globals
2314 If this is violated... Who cares? */
2317 /* altmod is either None or same as mod */
2319 load_next(PyObject
*mod
, PyObject
*altmod
, char **p_name
, char *buf
,
2320 Py_ssize_t
*p_buflen
)
2322 char *name
= *p_name
;
2323 char *dot
= strchr(name
, '.');
2328 if (strlen(name
) == 0) {
2329 /* completely empty module name should only happen in
2330 'from . import' (or '__import__("")')*/
2345 PyErr_SetString(PyExc_ValueError
,
2346 "Empty module name");
2350 p
= buf
+ *p_buflen
;
2353 if (p
+len
-buf
>= MAXPATHLEN
) {
2354 PyErr_SetString(PyExc_ValueError
,
2355 "Module name too long");
2358 strncpy(p
, name
, len
);
2360 *p_buflen
= p
+len
-buf
;
2362 result
= import_submodule(mod
, p
, buf
);
2363 if (result
== Py_None
&& altmod
!= mod
) {
2365 /* Here, altmod must be None and mod must not be None */
2366 result
= import_submodule(altmod
, p
, p
);
2367 if (result
!= NULL
&& result
!= Py_None
) {
2368 if (mark_miss(buf
) != 0) {
2372 strncpy(buf
, name
, len
);
2380 if (result
== Py_None
) {
2382 PyErr_Format(PyExc_ImportError
,
2383 "No module named %.200s", name
);
2391 mark_miss(char *name
)
2393 PyObject
*modules
= PyImport_GetModuleDict();
2394 return PyDict_SetItemString(modules
, name
, Py_None
);
2398 ensure_fromlist(PyObject
*mod
, PyObject
*fromlist
, char *buf
, Py_ssize_t buflen
,
2403 if (!PyObject_HasAttrString(mod
, "__path__"))
2406 for (i
= 0; ; i
++) {
2407 PyObject
*item
= PySequence_GetItem(fromlist
, i
);
2410 if (PyErr_ExceptionMatches(PyExc_IndexError
)) {
2416 if (!PyString_Check(item
)) {
2417 PyErr_SetString(PyExc_TypeError
,
2418 "Item in ``from list'' not a string");
2422 if (PyString_AS_STRING(item
)[0] == '*') {
2425 /* See if the package defines __all__ */
2427 continue; /* Avoid endless recursion */
2428 all
= PyObject_GetAttrString(mod
, "__all__");
2432 int ret
= ensure_fromlist(mod
, all
, buf
, buflen
, 1);
2439 hasit
= PyObject_HasAttr(mod
, item
);
2441 char *subname
= PyString_AS_STRING(item
);
2444 if (buflen
+ strlen(subname
) >= MAXPATHLEN
) {
2445 PyErr_SetString(PyExc_ValueError
,
2446 "Module name too long");
2453 submod
= import_submodule(mod
, subname
, buf
);
2455 if (submod
== NULL
) {
2467 add_submodule(PyObject
*mod
, PyObject
*submod
, char *fullname
, char *subname
,
2472 /* Irrespective of the success of this load, make a
2473 reference to it in the parent package module. A copy gets
2474 saved in the modules dictionary under the full name, so get a
2475 reference from there, if need be. (The exception is when the
2476 load failed with a SyntaxError -- then there's no trace in
2477 sys.modules. In that case, of course, do nothing extra.) */
2478 if (submod
== NULL
) {
2479 submod
= PyDict_GetItemString(modules
, fullname
);
2483 if (PyModule_Check(mod
)) {
2484 /* We can't use setattr here since it can give a
2485 * spurious warning if the submodule name shadows a
2487 PyObject
*dict
= PyModule_GetDict(mod
);
2490 if (PyDict_SetItemString(dict
, subname
, submod
) < 0)
2494 if (PyObject_SetAttrString(mod
, subname
, submod
) < 0)
2501 import_submodule(PyObject
*mod
, char *subname
, char *fullname
)
2503 PyObject
*modules
= PyImport_GetModuleDict();
2507 if mod == None: subname == fullname
2508 else: mod.__name__ + "." + subname == fullname
2511 if ((m
= PyDict_GetItemString(modules
, fullname
)) != NULL
) {
2515 PyObject
*path
, *loader
= NULL
;
2516 char buf
[MAXPATHLEN
+1];
2517 struct filedescr
*fdp
;
2523 path
= PyObject_GetAttrString(mod
, "__path__");
2532 fdp
= find_module(fullname
, subname
, path
, buf
, MAXPATHLEN
+1,
2536 if (!PyErr_ExceptionMatches(PyExc_ImportError
))
2542 m
= load_module(fullname
, fp
, buf
, fdp
->type
, loader
);
2546 if (!add_submodule(mod
, m
, fullname
, subname
, modules
)) {
2556 /* Re-import a module of any kind and return its module object, WITH
2557 INCREMENTED REFERENCE COUNT */
2560 PyImport_ReloadModule(PyObject
*m
)
2562 PyInterpreterState
*interp
= PyThreadState_Get()->interp
;
2563 PyObject
*modules_reloading
= interp
->modules_reloading
;
2564 PyObject
*modules
= PyImport_GetModuleDict();
2565 PyObject
*path
= NULL
, *loader
= NULL
, *existing_m
= NULL
;
2566 char *name
, *subname
;
2567 char buf
[MAXPATHLEN
+1];
2568 struct filedescr
*fdp
;
2572 if (modules_reloading
== NULL
) {
2573 Py_FatalError("PyImport_ReloadModule: "
2574 "no modules_reloading dictionary!");
2578 if (m
== NULL
|| !PyModule_Check(m
)) {
2579 PyErr_SetString(PyExc_TypeError
,
2580 "reload() argument must be module");
2583 name
= PyModule_GetName(m
);
2586 if (m
!= PyDict_GetItemString(modules
, name
)) {
2587 PyErr_Format(PyExc_ImportError
,
2588 "reload(): module %.200s not in sys.modules",
2592 existing_m
= PyDict_GetItemString(modules_reloading
, name
);
2593 if (existing_m
!= NULL
) {
2594 /* Due to a recursive reload, this module is already
2596 Py_INCREF(existing_m
);
2599 if (PyDict_SetItemString(modules_reloading
, name
, m
) < 0)
2602 subname
= strrchr(name
, '.');
2603 if (subname
== NULL
)
2606 PyObject
*parentname
, *parent
;
2607 parentname
= PyString_FromStringAndSize(name
, (subname
-name
));
2608 if (parentname
== NULL
) {
2609 imp_modules_reloading_clear();
2612 parent
= PyDict_GetItem(modules
, parentname
);
2613 if (parent
== NULL
) {
2614 PyErr_Format(PyExc_ImportError
,
2615 "reload(): parent %.200s not in sys.modules",
2616 PyString_AS_STRING(parentname
));
2617 Py_DECREF(parentname
);
2618 imp_modules_reloading_clear();
2621 Py_DECREF(parentname
);
2623 path
= PyObject_GetAttrString(parent
, "__path__");
2628 fdp
= find_module(name
, subname
, path
, buf
, MAXPATHLEN
+1, &fp
, &loader
);
2633 imp_modules_reloading_clear();
2637 newm
= load_module(name
, fp
, buf
, fdp
->type
, loader
);
2643 /* load_module probably removed name from modules because of
2644 * the error. Put back the original module object. We're
2645 * going to return NULL in this case regardless of whether
2646 * replacing name succeeds, so the return value is ignored.
2648 PyDict_SetItemString(modules
, name
, m
);
2650 imp_modules_reloading_clear();
2655 /* Higher-level import emulator which emulates the "import" statement
2656 more accurately -- it invokes the __import__() function from the
2657 builtins of the current globals. This means that the import is
2658 done using whatever import hooks are installed in the current
2659 environment, e.g. by "rexec".
2660 A dummy list ["__doc__"] is passed as the 4th argument so that
2661 e.g. PyImport_Import(PyString_FromString("win32com.client.gencache"))
2662 will return <module "gencache"> instead of <module "win32com">. */
2665 PyImport_Import(PyObject
*module_name
)
2667 static PyObject
*silly_list
= NULL
;
2668 static PyObject
*builtins_str
= NULL
;
2669 static PyObject
*import_str
= NULL
;
2670 PyObject
*globals
= NULL
;
2671 PyObject
*import
= NULL
;
2672 PyObject
*builtins
= NULL
;
2675 /* Initialize constant string objects */
2676 if (silly_list
== NULL
) {
2677 import_str
= PyString_InternFromString("__import__");
2678 if (import_str
== NULL
)
2680 builtins_str
= PyString_InternFromString("__builtins__");
2681 if (builtins_str
== NULL
)
2683 silly_list
= Py_BuildValue("[s]", "__doc__");
2684 if (silly_list
== NULL
)
2688 /* Get the builtins from current globals */
2689 globals
= PyEval_GetGlobals();
2690 if (globals
!= NULL
) {
2692 builtins
= PyObject_GetItem(globals
, builtins_str
);
2693 if (builtins
== NULL
)
2697 /* No globals -- use standard builtins, and fake globals */
2700 builtins
= PyImport_ImportModuleLevel("__builtin__",
2701 NULL
, NULL
, NULL
, 0);
2702 if (builtins
== NULL
)
2704 globals
= Py_BuildValue("{OO}", builtins_str
, builtins
);
2705 if (globals
== NULL
)
2709 /* Get the __import__ function from the builtins */
2710 if (PyDict_Check(builtins
)) {
2711 import
= PyObject_GetItem(builtins
, import_str
);
2713 PyErr_SetObject(PyExc_KeyError
, import_str
);
2716 import
= PyObject_GetAttr(builtins
, import_str
);
2720 /* Call the __import__ function with the proper argument list
2721 * Always use absolute import here. */
2722 r
= PyObject_CallFunction(import
, "OOOOi", module_name
, globals
,
2723 globals
, silly_list
, 0, NULL
);
2726 Py_XDECREF(globals
);
2727 Py_XDECREF(builtins
);
2734 /* Module 'imp' provides Python access to the primitives used for
2739 imp_get_magic(PyObject
*self
, PyObject
*noargs
)
2743 buf
[0] = (char) ((pyc_magic
>> 0) & 0xff);
2744 buf
[1] = (char) ((pyc_magic
>> 8) & 0xff);
2745 buf
[2] = (char) ((pyc_magic
>> 16) & 0xff);
2746 buf
[3] = (char) ((pyc_magic
>> 24) & 0xff);
2748 return PyString_FromStringAndSize(buf
, 4);
2752 imp_get_suffixes(PyObject
*self
, PyObject
*noargs
)
2755 struct filedescr
*fdp
;
2757 list
= PyList_New(0);
2760 for (fdp
= _PyImport_Filetab
; fdp
->suffix
!= NULL
; fdp
++) {
2761 PyObject
*item
= Py_BuildValue("ssi",
2762 fdp
->suffix
, fdp
->mode
, fdp
->type
);
2767 if (PyList_Append(list
, item
) < 0) {
2778 call_find_module(char *name
, PyObject
*path
)
2780 extern int fclose(FILE *);
2781 PyObject
*fob
, *ret
;
2782 struct filedescr
*fdp
;
2783 char pathname
[MAXPATHLEN
+1];
2787 if (path
== Py_None
)
2789 fdp
= find_module(NULL
, name
, path
, pathname
, MAXPATHLEN
+1, &fp
, NULL
);
2793 fob
= PyFile_FromFile(fp
, pathname
, fdp
->mode
, fclose
);
2803 ret
= Py_BuildValue("Os(ssi)",
2804 fob
, pathname
, fdp
->suffix
, fdp
->mode
, fdp
->type
);
2810 imp_find_module(PyObject
*self
, PyObject
*args
)
2813 PyObject
*path
= NULL
;
2814 if (!PyArg_ParseTuple(args
, "s|O:find_module", &name
, &path
))
2816 return call_find_module(name
, path
);
2820 imp_init_builtin(PyObject
*self
, PyObject
*args
)
2825 if (!PyArg_ParseTuple(args
, "s:init_builtin", &name
))
2827 ret
= init_builtin(name
);
2834 m
= PyImport_AddModule(name
);
2840 imp_init_frozen(PyObject
*self
, PyObject
*args
)
2845 if (!PyArg_ParseTuple(args
, "s:init_frozen", &name
))
2847 ret
= PyImport_ImportFrozenModule(name
);
2854 m
= PyImport_AddModule(name
);
2860 imp_get_frozen_object(PyObject
*self
, PyObject
*args
)
2864 if (!PyArg_ParseTuple(args
, "s:get_frozen_object", &name
))
2866 return get_frozen_object(name
);
2870 imp_is_builtin(PyObject
*self
, PyObject
*args
)
2873 if (!PyArg_ParseTuple(args
, "s:is_builtin", &name
))
2875 return PyInt_FromLong(is_builtin(name
));
2879 imp_is_frozen(PyObject
*self
, PyObject
*args
)
2883 if (!PyArg_ParseTuple(args
, "s:is_frozen", &name
))
2885 p
= find_frozen(name
);
2886 return PyBool_FromLong((long) (p
== NULL
? 0 : p
->size
));
2890 get_file(char *pathname
, PyObject
*fob
, char *mode
)
2895 mode
= "r" PY_STDIOTEXTMODE
;
2896 fp
= fopen(pathname
, mode
);
2898 PyErr_SetFromErrno(PyExc_IOError
);
2901 fp
= PyFile_AsFile(fob
);
2903 PyErr_SetString(PyExc_ValueError
,
2904 "bad/closed file object");
2910 imp_load_compiled(PyObject
*self
, PyObject
*args
)
2914 PyObject
*fob
= NULL
;
2917 if (!PyArg_ParseTuple(args
, "ss|O!:load_compiled", &name
, &pathname
,
2918 &PyFile_Type
, &fob
))
2920 fp
= get_file(pathname
, fob
, "rb");
2923 m
= load_compiled_module(name
, pathname
, fp
);
2929 #ifdef HAVE_DYNAMIC_LOADING
2932 imp_load_dynamic(PyObject
*self
, PyObject
*args
)
2936 PyObject
*fob
= NULL
;
2939 if (!PyArg_ParseTuple(args
, "ss|O!:load_dynamic", &name
, &pathname
,
2940 &PyFile_Type
, &fob
))
2943 fp
= get_file(pathname
, fob
, "r");
2947 m
= _PyImport_LoadDynamicModule(name
, pathname
, fp
);
2951 #endif /* HAVE_DYNAMIC_LOADING */
2954 imp_load_source(PyObject
*self
, PyObject
*args
)
2958 PyObject
*fob
= NULL
;
2961 if (!PyArg_ParseTuple(args
, "ss|O!:load_source", &name
, &pathname
,
2962 &PyFile_Type
, &fob
))
2964 fp
= get_file(pathname
, fob
, "r");
2967 m
= load_source_module(name
, pathname
, fp
);
2974 imp_load_module(PyObject
*self
, PyObject
*args
)
2979 char *suffix
; /* Unused */
2984 if (!PyArg_ParseTuple(args
, "sOs(ssi):load_module",
2985 &name
, &fob
, &pathname
,
2986 &suffix
, &mode
, &type
))
2989 /* Mode must start with 'r' or 'U' and must not contain '+'.
2990 Implicit in this test is the assumption that the mode
2991 may contain other modifiers like 'b' or 't'. */
2993 if (!(*mode
== 'r' || *mode
== 'U') || strchr(mode
, '+')) {
2994 PyErr_Format(PyExc_ValueError
,
2995 "invalid file open mode %.200s", mode
);
3002 if (!PyFile_Check(fob
)) {
3003 PyErr_SetString(PyExc_ValueError
,
3004 "load_module arg#2 should be a file or None");
3007 fp
= get_file(pathname
, fob
, mode
);
3011 return load_module(name
, fp
, pathname
, type
, NULL
);
3015 imp_load_package(PyObject
*self
, PyObject
*args
)
3019 if (!PyArg_ParseTuple(args
, "ss:load_package", &name
, &pathname
))
3021 return load_package(name
, pathname
);
3025 imp_new_module(PyObject
*self
, PyObject
*args
)
3028 if (!PyArg_ParseTuple(args
, "s:new_module", &name
))
3030 return PyModule_New(name
);
3035 PyDoc_STRVAR(doc_imp
,
3036 "This module provides the components needed to build your own\n\
3037 __import__ function. Undocumented functions are obsolete.");
3039 PyDoc_STRVAR(doc_find_module
,
3040 "find_module(name, [path]) -> (file, filename, (suffix, mode, type))\n\
3041 Search for a module. If path is omitted or None, search for a\n\
3042 built-in, frozen or special module and continue search in sys.path.\n\
3043 The module name cannot contain '.'; to search for a submodule of a\n\
3044 package, pass the submodule name and the package's __path__.");
3046 PyDoc_STRVAR(doc_load_module
,
3047 "load_module(name, file, filename, (suffix, mode, type)) -> module\n\
3048 Load a module, given information returned by find_module().\n\
3049 The module name must include the full package name, if any.");
3051 PyDoc_STRVAR(doc_get_magic
,
3052 "get_magic() -> string\n\
3053 Return the magic number for .pyc or .pyo files.");
3055 PyDoc_STRVAR(doc_get_suffixes
,
3056 "get_suffixes() -> [(suffix, mode, type), ...]\n\
3057 Return a list of (suffix, mode, type) tuples describing the files\n\
3058 that find_module() looks for.");
3060 PyDoc_STRVAR(doc_new_module
,
3061 "new_module(name) -> module\n\
3062 Create a new module. Do not enter it in sys.modules.\n\
3063 The module name must include the full package name, if any.");
3065 PyDoc_STRVAR(doc_lock_held
,
3066 "lock_held() -> boolean\n\
3067 Return True if the import lock is currently held, else False.\n\
3068 On platforms without threads, return False.");
3070 PyDoc_STRVAR(doc_acquire_lock
,
3071 "acquire_lock() -> None\n\
3072 Acquires the interpreter's import lock for the current thread.\n\
3073 This lock should be used by import hooks to ensure thread-safety\n\
3074 when importing modules.\n\
3075 On platforms without threads, this function does nothing.");
3077 PyDoc_STRVAR(doc_release_lock
,
3078 "release_lock() -> None\n\
3079 Release the interpreter's import lock.\n\
3080 On platforms without threads, this function does nothing.");
3082 static PyMethodDef imp_methods
[] = {
3083 {"find_module", imp_find_module
, METH_VARARGS
, doc_find_module
},
3084 {"get_magic", imp_get_magic
, METH_NOARGS
, doc_get_magic
},
3085 {"get_suffixes", imp_get_suffixes
, METH_NOARGS
, doc_get_suffixes
},
3086 {"load_module", imp_load_module
, METH_VARARGS
, doc_load_module
},
3087 {"new_module", imp_new_module
, METH_VARARGS
, doc_new_module
},
3088 {"lock_held", imp_lock_held
, METH_NOARGS
, doc_lock_held
},
3089 {"acquire_lock", imp_acquire_lock
, METH_NOARGS
, doc_acquire_lock
},
3090 {"release_lock", imp_release_lock
, METH_NOARGS
, doc_release_lock
},
3091 /* The rest are obsolete */
3092 {"get_frozen_object", imp_get_frozen_object
, METH_VARARGS
},
3093 {"init_builtin", imp_init_builtin
, METH_VARARGS
},
3094 {"init_frozen", imp_init_frozen
, METH_VARARGS
},
3095 {"is_builtin", imp_is_builtin
, METH_VARARGS
},
3096 {"is_frozen", imp_is_frozen
, METH_VARARGS
},
3097 {"load_compiled", imp_load_compiled
, METH_VARARGS
},
3098 #ifdef HAVE_DYNAMIC_LOADING
3099 {"load_dynamic", imp_load_dynamic
, METH_VARARGS
},
3101 {"load_package", imp_load_package
, METH_VARARGS
},
3102 {"load_source", imp_load_source
, METH_VARARGS
},
3103 {NULL
, NULL
} /* sentinel */
3107 setint(PyObject
*d
, char *name
, int value
)
3112 v
= PyInt_FromLong((long)value
);
3113 err
= PyDict_SetItemString(d
, name
, v
);
3123 NullImporter_init(NullImporter
*self
, PyObject
*args
, PyObject
*kwds
)
3128 if (!_PyArg_NoKeywords("NullImporter()", kwds
))
3131 if (!PyArg_ParseTuple(args
, "s:NullImporter",
3135 pathlen
= strlen(path
);
3137 PyErr_SetString(PyExc_ImportError
, "empty pathname");
3141 struct stat statbuf
;
3144 rv
= stat(path
, &statbuf
);
3146 /* MS Windows stat() chokes on paths like C:\path\. Try to
3147 * recover *one* time by stripping off a trailing slash or
3148 * backslash. http://bugs.python.org/issue1293
3150 if (rv
!= 0 && pathlen
<= MAXPATHLEN
&&
3151 (path
[pathlen
-1] == '/' || path
[pathlen
-1] == '\\')) {
3152 char mangled
[MAXPATHLEN
+1];
3154 strcpy(mangled
, path
);
3155 mangled
[pathlen
-1] = '\0';
3156 rv
= stat(mangled
, &statbuf
);
3161 if (S_ISDIR(statbuf
.st_mode
)) {
3162 /* it's a directory */
3163 PyErr_SetString(PyExc_ImportError
,
3164 "existing directory");
3169 if (object_exists(path
)) {
3172 /* it's a directory */
3173 PyErr_SetString(PyExc_ImportError
,
3174 "existing directory");
3184 NullImporter_find_module(NullImporter
*self
, PyObject
*args
)
3189 static PyMethodDef NullImporter_methods
[] = {
3190 {"find_module", (PyCFunction
)NullImporter_find_module
, METH_VARARGS
,
3191 "Always return None"
3193 {NULL
} /* Sentinel */
3197 PyTypeObject PyNullImporter_Type
= {
3198 PyVarObject_HEAD_INIT(NULL
, 0)
3199 "imp.NullImporter", /*tp_name*/
3200 sizeof(NullImporter
), /*tp_basicsize*/
3209 0, /*tp_as_sequence*/
3210 0, /*tp_as_mapping*/
3217 Py_TPFLAGS_DEFAULT
, /*tp_flags*/
3218 "Null importer object", /* tp_doc */
3219 0, /* tp_traverse */
3221 0, /* tp_richcompare */
3222 0, /* tp_weaklistoffset */
3224 0, /* tp_iternext */
3225 NullImporter_methods
, /* tp_methods */
3230 0, /* tp_descr_get */
3231 0, /* tp_descr_set */
3232 0, /* tp_dictoffset */
3233 (initproc
)NullImporter_init
, /* tp_init */
3235 PyType_GenericNew
/* tp_new */
3244 if (PyType_Ready(&PyNullImporter_Type
) < 0)
3247 m
= Py_InitModule4("imp", imp_methods
, doc_imp
,
3248 NULL
, PYTHON_API_VERSION
);
3251 d
= PyModule_GetDict(m
);
3255 if (setint(d
, "SEARCH_ERROR", SEARCH_ERROR
) < 0) goto failure
;
3256 if (setint(d
, "PY_SOURCE", PY_SOURCE
) < 0) goto failure
;
3257 if (setint(d
, "PY_COMPILED", PY_COMPILED
) < 0) goto failure
;
3258 if (setint(d
, "C_EXTENSION", C_EXTENSION
) < 0) goto failure
;
3259 if (setint(d
, "PY_RESOURCE", PY_RESOURCE
) < 0) goto failure
;
3260 if (setint(d
, "PKG_DIRECTORY", PKG_DIRECTORY
) < 0) goto failure
;
3261 if (setint(d
, "C_BUILTIN", C_BUILTIN
) < 0) goto failure
;
3262 if (setint(d
, "PY_FROZEN", PY_FROZEN
) < 0) goto failure
;
3263 if (setint(d
, "PY_CODERESOURCE", PY_CODERESOURCE
) < 0) goto failure
;
3264 if (setint(d
, "IMP_HOOK", IMP_HOOK
) < 0) goto failure
;
3266 Py_INCREF(&PyNullImporter_Type
);
3267 PyModule_AddObject(m
, "NullImporter", (PyObject
*)&PyNullImporter_Type
);
3273 /* API for embedding applications that want to add their own entries
3274 to the table of built-in modules. This should normally be called
3275 *before* Py_Initialize(). When the table resize fails, -1 is
3276 returned and the existing table is unchanged.
3278 After a similar function by Just van Rossum. */
3281 PyImport_ExtendInittab(struct _inittab
*newtab
)
3283 static struct _inittab
*our_copy
= NULL
;
3287 /* Count the number of entries in both tables */
3288 for (n
= 0; newtab
[n
].name
!= NULL
; n
++)
3291 return 0; /* Nothing to do */
3292 for (i
= 0; PyImport_Inittab
[i
].name
!= NULL
; i
++)
3295 /* Allocate new memory for the combined table */
3297 PyMem_RESIZE(p
, struct _inittab
, i
+n
+1);
3301 /* Copy the tables into the new memory */
3302 if (our_copy
!= PyImport_Inittab
)
3303 memcpy(p
, PyImport_Inittab
, (i
+1) * sizeof(struct _inittab
));
3304 PyImport_Inittab
= our_copy
= p
;
3305 memcpy(p
+i
, newtab
, (n
+1) * sizeof(struct _inittab
));
3310 /* Shorthand to add a single entry given a name and a function */
3313 PyImport_AppendInittab(char *name
, void (*initfunc
)(void))
3315 struct _inittab newtab
[2];
3317 memset(newtab
, '\0', sizeof newtab
);
3319 newtab
[0].name
= name
;
3320 newtab
[0].initfunc
= initfunc
;
3322 return PyImport_ExtendInittab(newtab
);