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
;
2164 if (globals
== NULL
|| !PyDict_Check(globals
) || !level
)
2167 if (namestr
== NULL
) {
2168 namestr
= PyString_InternFromString("__name__");
2169 if (namestr
== NULL
)
2172 if (pathstr
== NULL
) {
2173 pathstr
= PyString_InternFromString("__path__");
2174 if (pathstr
== NULL
)
2177 if (pkgstr
== NULL
) {
2178 pkgstr
= PyString_InternFromString("__package__");
2185 pkgname
= PyDict_GetItem(globals
, pkgstr
);
2187 if ((pkgname
!= NULL
) && (pkgname
!= Py_None
)) {
2188 /* __package__ is set, so use it */
2190 if (!PyString_Check(pkgname
)) {
2191 PyErr_SetString(PyExc_ValueError
,
2192 "__package__ set to non-string");
2195 len
= PyString_GET_SIZE(pkgname
);
2198 PyErr_SetString(PyExc_ValueError
,
2199 "Attempted relative import in non-package");
2204 if (len
> MAXPATHLEN
) {
2205 PyErr_SetString(PyExc_ValueError
,
2206 "Package name too long");
2209 strcpy(buf
, PyString_AS_STRING(pkgname
));
2211 /* __package__ not set, so figure it out and set it */
2212 modname
= PyDict_GetItem(globals
, namestr
);
2213 if (modname
== NULL
|| !PyString_Check(modname
))
2216 modpath
= PyDict_GetItem(globals
, pathstr
);
2217 if (modpath
!= NULL
) {
2218 /* __path__ is set, so modname is already the package name */
2219 Py_ssize_t len
= PyString_GET_SIZE(modname
);
2221 if (len
> MAXPATHLEN
) {
2222 PyErr_SetString(PyExc_ValueError
,
2223 "Module name too long");
2226 strcpy(buf
, PyString_AS_STRING(modname
));
2227 error
= PyDict_SetItem(globals
, pkgstr
, modname
);
2229 PyErr_SetString(PyExc_ValueError
,
2230 "Could not set __package__");
2234 /* Normal module, so work out the package name if any */
2235 char *start
= PyString_AS_STRING(modname
);
2236 char *lastdot
= strrchr(start
, '.');
2239 if (lastdot
== NULL
&& level
> 0) {
2240 PyErr_SetString(PyExc_ValueError
,
2241 "Attempted relative import in non-package");
2244 if (lastdot
== NULL
) {
2245 error
= PyDict_SetItem(globals
, pkgstr
, Py_None
);
2247 PyErr_SetString(PyExc_ValueError
,
2248 "Could not set __package__");
2253 len
= lastdot
- start
;
2254 if (len
>= MAXPATHLEN
) {
2255 PyErr_SetString(PyExc_ValueError
,
2256 "Module name too long");
2259 strncpy(buf
, start
, len
);
2261 pkgname
= PyString_FromString(buf
);
2262 if (pkgname
== NULL
) {
2265 error
= PyDict_SetItem(globals
, pkgstr
, pkgname
);
2268 PyErr_SetString(PyExc_ValueError
,
2269 "Could not set __package__");
2274 while (--level
> 0) {
2275 char *dot
= strrchr(buf
, '.');
2277 PyErr_SetString(PyExc_ValueError
,
2278 "Attempted relative import beyond "
2279 "toplevel package");
2284 *p_buflen
= strlen(buf
);
2286 modules
= PyImport_GetModuleDict();
2287 parent
= PyDict_GetItemString(modules
, buf
);
2289 PyErr_Format(PyExc_SystemError
,
2290 "Parent module '%.200s' not loaded", buf
);
2292 /* We expect, but can't guarantee, if parent != None, that:
2293 - parent.__name__ == buf
2294 - parent.__dict__ is globals
2295 If this is violated... Who cares? */
2298 /* altmod is either None or same as mod */
2300 load_next(PyObject
*mod
, PyObject
*altmod
, char **p_name
, char *buf
,
2301 Py_ssize_t
*p_buflen
)
2303 char *name
= *p_name
;
2304 char *dot
= strchr(name
, '.');
2309 if (strlen(name
) == 0) {
2310 /* completely empty module name should only happen in
2311 'from . import' (or '__import__("")')*/
2326 PyErr_SetString(PyExc_ValueError
,
2327 "Empty module name");
2331 p
= buf
+ *p_buflen
;
2334 if (p
+len
-buf
>= MAXPATHLEN
) {
2335 PyErr_SetString(PyExc_ValueError
,
2336 "Module name too long");
2339 strncpy(p
, name
, len
);
2341 *p_buflen
= p
+len
-buf
;
2343 result
= import_submodule(mod
, p
, buf
);
2344 if (result
== Py_None
&& altmod
!= mod
) {
2346 /* Here, altmod must be None and mod must not be None */
2347 result
= import_submodule(altmod
, p
, p
);
2348 if (result
!= NULL
&& result
!= Py_None
) {
2349 if (mark_miss(buf
) != 0) {
2353 strncpy(buf
, name
, len
);
2361 if (result
== Py_None
) {
2363 PyErr_Format(PyExc_ImportError
,
2364 "No module named %.200s", name
);
2372 mark_miss(char *name
)
2374 PyObject
*modules
= PyImport_GetModuleDict();
2375 return PyDict_SetItemString(modules
, name
, Py_None
);
2379 ensure_fromlist(PyObject
*mod
, PyObject
*fromlist
, char *buf
, Py_ssize_t buflen
,
2384 if (!PyObject_HasAttrString(mod
, "__path__"))
2387 for (i
= 0; ; i
++) {
2388 PyObject
*item
= PySequence_GetItem(fromlist
, i
);
2391 if (PyErr_ExceptionMatches(PyExc_IndexError
)) {
2397 if (!PyString_Check(item
)) {
2398 PyErr_SetString(PyExc_TypeError
,
2399 "Item in ``from list'' not a string");
2403 if (PyString_AS_STRING(item
)[0] == '*') {
2406 /* See if the package defines __all__ */
2408 continue; /* Avoid endless recursion */
2409 all
= PyObject_GetAttrString(mod
, "__all__");
2413 int ret
= ensure_fromlist(mod
, all
, buf
, buflen
, 1);
2420 hasit
= PyObject_HasAttr(mod
, item
);
2422 char *subname
= PyString_AS_STRING(item
);
2425 if (buflen
+ strlen(subname
) >= MAXPATHLEN
) {
2426 PyErr_SetString(PyExc_ValueError
,
2427 "Module name too long");
2434 submod
= import_submodule(mod
, subname
, buf
);
2436 if (submod
== NULL
) {
2448 add_submodule(PyObject
*mod
, PyObject
*submod
, char *fullname
, char *subname
,
2453 /* Irrespective of the success of this load, make a
2454 reference to it in the parent package module. A copy gets
2455 saved in the modules dictionary under the full name, so get a
2456 reference from there, if need be. (The exception is when the
2457 load failed with a SyntaxError -- then there's no trace in
2458 sys.modules. In that case, of course, do nothing extra.) */
2459 if (submod
== NULL
) {
2460 submod
= PyDict_GetItemString(modules
, fullname
);
2464 if (PyModule_Check(mod
)) {
2465 /* We can't use setattr here since it can give a
2466 * spurious warning if the submodule name shadows a
2468 PyObject
*dict
= PyModule_GetDict(mod
);
2471 if (PyDict_SetItemString(dict
, subname
, submod
) < 0)
2475 if (PyObject_SetAttrString(mod
, subname
, submod
) < 0)
2482 import_submodule(PyObject
*mod
, char *subname
, char *fullname
)
2484 PyObject
*modules
= PyImport_GetModuleDict();
2488 if mod == None: subname == fullname
2489 else: mod.__name__ + "." + subname == fullname
2492 if ((m
= PyDict_GetItemString(modules
, fullname
)) != NULL
) {
2496 PyObject
*path
, *loader
= NULL
;
2497 char buf
[MAXPATHLEN
+1];
2498 struct filedescr
*fdp
;
2504 path
= PyObject_GetAttrString(mod
, "__path__");
2513 fdp
= find_module(fullname
, subname
, path
, buf
, MAXPATHLEN
+1,
2517 if (!PyErr_ExceptionMatches(PyExc_ImportError
))
2523 m
= load_module(fullname
, fp
, buf
, fdp
->type
, loader
);
2527 if (!add_submodule(mod
, m
, fullname
, subname
, modules
)) {
2537 /* Re-import a module of any kind and return its module object, WITH
2538 INCREMENTED REFERENCE COUNT */
2541 PyImport_ReloadModule(PyObject
*m
)
2543 PyInterpreterState
*interp
= PyThreadState_Get()->interp
;
2544 PyObject
*modules_reloading
= interp
->modules_reloading
;
2545 PyObject
*modules
= PyImport_GetModuleDict();
2546 PyObject
*path
= NULL
, *loader
= NULL
, *existing_m
= NULL
;
2547 char *name
, *subname
;
2548 char buf
[MAXPATHLEN
+1];
2549 struct filedescr
*fdp
;
2553 if (modules_reloading
== NULL
) {
2554 Py_FatalError("PyImport_ReloadModule: "
2555 "no modules_reloading dictionary!");
2559 if (m
== NULL
|| !PyModule_Check(m
)) {
2560 PyErr_SetString(PyExc_TypeError
,
2561 "reload() argument must be module");
2564 name
= PyModule_GetName(m
);
2567 if (m
!= PyDict_GetItemString(modules
, name
)) {
2568 PyErr_Format(PyExc_ImportError
,
2569 "reload(): module %.200s not in sys.modules",
2573 existing_m
= PyDict_GetItemString(modules_reloading
, name
);
2574 if (existing_m
!= NULL
) {
2575 /* Due to a recursive reload, this module is already
2577 Py_INCREF(existing_m
);
2580 if (PyDict_SetItemString(modules_reloading
, name
, m
) < 0)
2583 subname
= strrchr(name
, '.');
2584 if (subname
== NULL
)
2587 PyObject
*parentname
, *parent
;
2588 parentname
= PyString_FromStringAndSize(name
, (subname
-name
));
2589 if (parentname
== NULL
) {
2590 imp_modules_reloading_clear();
2593 parent
= PyDict_GetItem(modules
, parentname
);
2594 if (parent
== NULL
) {
2595 PyErr_Format(PyExc_ImportError
,
2596 "reload(): parent %.200s not in sys.modules",
2597 PyString_AS_STRING(parentname
));
2598 Py_DECREF(parentname
);
2599 imp_modules_reloading_clear();
2602 Py_DECREF(parentname
);
2604 path
= PyObject_GetAttrString(parent
, "__path__");
2609 fdp
= find_module(name
, subname
, path
, buf
, MAXPATHLEN
+1, &fp
, &loader
);
2614 imp_modules_reloading_clear();
2618 newm
= load_module(name
, fp
, buf
, fdp
->type
, loader
);
2624 /* load_module probably removed name from modules because of
2625 * the error. Put back the original module object. We're
2626 * going to return NULL in this case regardless of whether
2627 * replacing name succeeds, so the return value is ignored.
2629 PyDict_SetItemString(modules
, name
, m
);
2631 imp_modules_reloading_clear();
2636 /* Higher-level import emulator which emulates the "import" statement
2637 more accurately -- it invokes the __import__() function from the
2638 builtins of the current globals. This means that the import is
2639 done using whatever import hooks are installed in the current
2640 environment, e.g. by "rexec".
2641 A dummy list ["__doc__"] is passed as the 4th argument so that
2642 e.g. PyImport_Import(PyString_FromString("win32com.client.gencache"))
2643 will return <module "gencache"> instead of <module "win32com">. */
2646 PyImport_Import(PyObject
*module_name
)
2648 static PyObject
*silly_list
= NULL
;
2649 static PyObject
*builtins_str
= NULL
;
2650 static PyObject
*import_str
= NULL
;
2651 PyObject
*globals
= NULL
;
2652 PyObject
*import
= NULL
;
2653 PyObject
*builtins
= NULL
;
2656 /* Initialize constant string objects */
2657 if (silly_list
== NULL
) {
2658 import_str
= PyString_InternFromString("__import__");
2659 if (import_str
== NULL
)
2661 builtins_str
= PyString_InternFromString("__builtins__");
2662 if (builtins_str
== NULL
)
2664 silly_list
= Py_BuildValue("[s]", "__doc__");
2665 if (silly_list
== NULL
)
2669 /* Get the builtins from current globals */
2670 globals
= PyEval_GetGlobals();
2671 if (globals
!= NULL
) {
2673 builtins
= PyObject_GetItem(globals
, builtins_str
);
2674 if (builtins
== NULL
)
2678 /* No globals -- use standard builtins, and fake globals */
2681 builtins
= PyImport_ImportModuleLevel("__builtin__",
2682 NULL
, NULL
, NULL
, 0);
2683 if (builtins
== NULL
)
2685 globals
= Py_BuildValue("{OO}", builtins_str
, builtins
);
2686 if (globals
== NULL
)
2690 /* Get the __import__ function from the builtins */
2691 if (PyDict_Check(builtins
)) {
2692 import
= PyObject_GetItem(builtins
, import_str
);
2694 PyErr_SetObject(PyExc_KeyError
, import_str
);
2697 import
= PyObject_GetAttr(builtins
, import_str
);
2701 /* Call the __import__ function with the proper argument list
2702 * Always use absolute import here. */
2703 r
= PyObject_CallFunction(import
, "OOOOi", module_name
, globals
,
2704 globals
, silly_list
, 0, NULL
);
2707 Py_XDECREF(globals
);
2708 Py_XDECREF(builtins
);
2715 /* Module 'imp' provides Python access to the primitives used for
2720 imp_get_magic(PyObject
*self
, PyObject
*noargs
)
2724 buf
[0] = (char) ((pyc_magic
>> 0) & 0xff);
2725 buf
[1] = (char) ((pyc_magic
>> 8) & 0xff);
2726 buf
[2] = (char) ((pyc_magic
>> 16) & 0xff);
2727 buf
[3] = (char) ((pyc_magic
>> 24) & 0xff);
2729 return PyString_FromStringAndSize(buf
, 4);
2733 imp_get_suffixes(PyObject
*self
, PyObject
*noargs
)
2736 struct filedescr
*fdp
;
2738 list
= PyList_New(0);
2741 for (fdp
= _PyImport_Filetab
; fdp
->suffix
!= NULL
; fdp
++) {
2742 PyObject
*item
= Py_BuildValue("ssi",
2743 fdp
->suffix
, fdp
->mode
, fdp
->type
);
2748 if (PyList_Append(list
, item
) < 0) {
2759 call_find_module(char *name
, PyObject
*path
)
2761 extern int fclose(FILE *);
2762 PyObject
*fob
, *ret
;
2763 struct filedescr
*fdp
;
2764 char pathname
[MAXPATHLEN
+1];
2768 if (path
== Py_None
)
2770 fdp
= find_module(NULL
, name
, path
, pathname
, MAXPATHLEN
+1, &fp
, NULL
);
2774 fob
= PyFile_FromFile(fp
, pathname
, fdp
->mode
, fclose
);
2784 ret
= Py_BuildValue("Os(ssi)",
2785 fob
, pathname
, fdp
->suffix
, fdp
->mode
, fdp
->type
);
2791 imp_find_module(PyObject
*self
, PyObject
*args
)
2794 PyObject
*path
= NULL
;
2795 if (!PyArg_ParseTuple(args
, "s|O:find_module", &name
, &path
))
2797 return call_find_module(name
, path
);
2801 imp_init_builtin(PyObject
*self
, PyObject
*args
)
2806 if (!PyArg_ParseTuple(args
, "s:init_builtin", &name
))
2808 ret
= init_builtin(name
);
2815 m
= PyImport_AddModule(name
);
2821 imp_init_frozen(PyObject
*self
, PyObject
*args
)
2826 if (!PyArg_ParseTuple(args
, "s:init_frozen", &name
))
2828 ret
= PyImport_ImportFrozenModule(name
);
2835 m
= PyImport_AddModule(name
);
2841 imp_get_frozen_object(PyObject
*self
, PyObject
*args
)
2845 if (!PyArg_ParseTuple(args
, "s:get_frozen_object", &name
))
2847 return get_frozen_object(name
);
2851 imp_is_builtin(PyObject
*self
, PyObject
*args
)
2854 if (!PyArg_ParseTuple(args
, "s:is_builtin", &name
))
2856 return PyInt_FromLong(is_builtin(name
));
2860 imp_is_frozen(PyObject
*self
, PyObject
*args
)
2864 if (!PyArg_ParseTuple(args
, "s:is_frozen", &name
))
2866 p
= find_frozen(name
);
2867 return PyBool_FromLong((long) (p
== NULL
? 0 : p
->size
));
2871 get_file(char *pathname
, PyObject
*fob
, char *mode
)
2876 mode
= "r" PY_STDIOTEXTMODE
;
2877 fp
= fopen(pathname
, mode
);
2879 PyErr_SetFromErrno(PyExc_IOError
);
2882 fp
= PyFile_AsFile(fob
);
2884 PyErr_SetString(PyExc_ValueError
,
2885 "bad/closed file object");
2891 imp_load_compiled(PyObject
*self
, PyObject
*args
)
2895 PyObject
*fob
= NULL
;
2898 if (!PyArg_ParseTuple(args
, "ss|O!:load_compiled", &name
, &pathname
,
2899 &PyFile_Type
, &fob
))
2901 fp
= get_file(pathname
, fob
, "rb");
2904 m
= load_compiled_module(name
, pathname
, fp
);
2910 #ifdef HAVE_DYNAMIC_LOADING
2913 imp_load_dynamic(PyObject
*self
, PyObject
*args
)
2917 PyObject
*fob
= NULL
;
2920 if (!PyArg_ParseTuple(args
, "ss|O!:load_dynamic", &name
, &pathname
,
2921 &PyFile_Type
, &fob
))
2924 fp
= get_file(pathname
, fob
, "r");
2928 m
= _PyImport_LoadDynamicModule(name
, pathname
, fp
);
2932 #endif /* HAVE_DYNAMIC_LOADING */
2935 imp_load_source(PyObject
*self
, PyObject
*args
)
2939 PyObject
*fob
= NULL
;
2942 if (!PyArg_ParseTuple(args
, "ss|O!:load_source", &name
, &pathname
,
2943 &PyFile_Type
, &fob
))
2945 fp
= get_file(pathname
, fob
, "r");
2948 m
= load_source_module(name
, pathname
, fp
);
2955 imp_load_module(PyObject
*self
, PyObject
*args
)
2960 char *suffix
; /* Unused */
2965 if (!PyArg_ParseTuple(args
, "sOs(ssi):load_module",
2966 &name
, &fob
, &pathname
,
2967 &suffix
, &mode
, &type
))
2970 /* Mode must start with 'r' or 'U' and must not contain '+'.
2971 Implicit in this test is the assumption that the mode
2972 may contain other modifiers like 'b' or 't'. */
2974 if (!(*mode
== 'r' || *mode
== 'U') || strchr(mode
, '+')) {
2975 PyErr_Format(PyExc_ValueError
,
2976 "invalid file open mode %.200s", mode
);
2983 if (!PyFile_Check(fob
)) {
2984 PyErr_SetString(PyExc_ValueError
,
2985 "load_module arg#2 should be a file or None");
2988 fp
= get_file(pathname
, fob
, mode
);
2992 return load_module(name
, fp
, pathname
, type
, NULL
);
2996 imp_load_package(PyObject
*self
, PyObject
*args
)
3000 if (!PyArg_ParseTuple(args
, "ss:load_package", &name
, &pathname
))
3002 return load_package(name
, pathname
);
3006 imp_new_module(PyObject
*self
, PyObject
*args
)
3009 if (!PyArg_ParseTuple(args
, "s:new_module", &name
))
3011 return PyModule_New(name
);
3016 PyDoc_STRVAR(doc_imp
,
3017 "This module provides the components needed to build your own\n\
3018 __import__ function. Undocumented functions are obsolete.");
3020 PyDoc_STRVAR(doc_find_module
,
3021 "find_module(name, [path]) -> (file, filename, (suffix, mode, type))\n\
3022 Search for a module. If path is omitted or None, search for a\n\
3023 built-in, frozen or special module and continue search in sys.path.\n\
3024 The module name cannot contain '.'; to search for a submodule of a\n\
3025 package, pass the submodule name and the package's __path__.");
3027 PyDoc_STRVAR(doc_load_module
,
3028 "load_module(name, file, filename, (suffix, mode, type)) -> module\n\
3029 Load a module, given information returned by find_module().\n\
3030 The module name must include the full package name, if any.");
3032 PyDoc_STRVAR(doc_get_magic
,
3033 "get_magic() -> string\n\
3034 Return the magic number for .pyc or .pyo files.");
3036 PyDoc_STRVAR(doc_get_suffixes
,
3037 "get_suffixes() -> [(suffix, mode, type), ...]\n\
3038 Return a list of (suffix, mode, type) tuples describing the files\n\
3039 that find_module() looks for.");
3041 PyDoc_STRVAR(doc_new_module
,
3042 "new_module(name) -> module\n\
3043 Create a new module. Do not enter it in sys.modules.\n\
3044 The module name must include the full package name, if any.");
3046 PyDoc_STRVAR(doc_lock_held
,
3047 "lock_held() -> boolean\n\
3048 Return True if the import lock is currently held, else False.\n\
3049 On platforms without threads, return False.");
3051 PyDoc_STRVAR(doc_acquire_lock
,
3052 "acquire_lock() -> None\n\
3053 Acquires the interpreter's import lock for the current thread.\n\
3054 This lock should be used by import hooks to ensure thread-safety\n\
3055 when importing modules.\n\
3056 On platforms without threads, this function does nothing.");
3058 PyDoc_STRVAR(doc_release_lock
,
3059 "release_lock() -> None\n\
3060 Release the interpreter's import lock.\n\
3061 On platforms without threads, this function does nothing.");
3063 static PyMethodDef imp_methods
[] = {
3064 {"find_module", imp_find_module
, METH_VARARGS
, doc_find_module
},
3065 {"get_magic", imp_get_magic
, METH_NOARGS
, doc_get_magic
},
3066 {"get_suffixes", imp_get_suffixes
, METH_NOARGS
, doc_get_suffixes
},
3067 {"load_module", imp_load_module
, METH_VARARGS
, doc_load_module
},
3068 {"new_module", imp_new_module
, METH_VARARGS
, doc_new_module
},
3069 {"lock_held", imp_lock_held
, METH_NOARGS
, doc_lock_held
},
3070 {"acquire_lock", imp_acquire_lock
, METH_NOARGS
, doc_acquire_lock
},
3071 {"release_lock", imp_release_lock
, METH_NOARGS
, doc_release_lock
},
3072 /* The rest are obsolete */
3073 {"get_frozen_object", imp_get_frozen_object
, METH_VARARGS
},
3074 {"init_builtin", imp_init_builtin
, METH_VARARGS
},
3075 {"init_frozen", imp_init_frozen
, METH_VARARGS
},
3076 {"is_builtin", imp_is_builtin
, METH_VARARGS
},
3077 {"is_frozen", imp_is_frozen
, METH_VARARGS
},
3078 {"load_compiled", imp_load_compiled
, METH_VARARGS
},
3079 #ifdef HAVE_DYNAMIC_LOADING
3080 {"load_dynamic", imp_load_dynamic
, METH_VARARGS
},
3082 {"load_package", imp_load_package
, METH_VARARGS
},
3083 {"load_source", imp_load_source
, METH_VARARGS
},
3084 {NULL
, NULL
} /* sentinel */
3088 setint(PyObject
*d
, char *name
, int value
)
3093 v
= PyInt_FromLong((long)value
);
3094 err
= PyDict_SetItemString(d
, name
, v
);
3104 NullImporter_init(NullImporter
*self
, PyObject
*args
, PyObject
*kwds
)
3109 if (!_PyArg_NoKeywords("NullImporter()", kwds
))
3112 if (!PyArg_ParseTuple(args
, "s:NullImporter",
3116 pathlen
= strlen(path
);
3118 PyErr_SetString(PyExc_ImportError
, "empty pathname");
3122 struct stat statbuf
;
3125 rv
= stat(path
, &statbuf
);
3127 /* MS Windows stat() chokes on paths like C:\path\. Try to
3128 * recover *one* time by stripping off a trailing slash or
3129 * backslash. http://bugs.python.org/issue1293
3131 if (rv
!= 0 && pathlen
<= MAXPATHLEN
&&
3132 (path
[pathlen
-1] == '/' || path
[pathlen
-1] == '\\')) {
3133 char mangled
[MAXPATHLEN
+1];
3135 strcpy(mangled
, path
);
3136 mangled
[pathlen
-1] = '\0';
3137 rv
= stat(mangled
, &statbuf
);
3142 if (S_ISDIR(statbuf
.st_mode
)) {
3143 /* it's a directory */
3144 PyErr_SetString(PyExc_ImportError
,
3145 "existing directory");
3150 if (object_exists(path
)) {
3153 /* it's a directory */
3154 PyErr_SetString(PyExc_ImportError
,
3155 "existing directory");
3165 NullImporter_find_module(NullImporter
*self
, PyObject
*args
)
3170 static PyMethodDef NullImporter_methods
[] = {
3171 {"find_module", (PyCFunction
)NullImporter_find_module
, METH_VARARGS
,
3172 "Always return None"
3174 {NULL
} /* Sentinel */
3178 PyTypeObject PyNullImporter_Type
= {
3179 PyVarObject_HEAD_INIT(NULL
, 0)
3180 "imp.NullImporter", /*tp_name*/
3181 sizeof(NullImporter
), /*tp_basicsize*/
3190 0, /*tp_as_sequence*/
3191 0, /*tp_as_mapping*/
3198 Py_TPFLAGS_DEFAULT
, /*tp_flags*/
3199 "Null importer object", /* tp_doc */
3200 0, /* tp_traverse */
3202 0, /* tp_richcompare */
3203 0, /* tp_weaklistoffset */
3205 0, /* tp_iternext */
3206 NullImporter_methods
, /* tp_methods */
3211 0, /* tp_descr_get */
3212 0, /* tp_descr_set */
3213 0, /* tp_dictoffset */
3214 (initproc
)NullImporter_init
, /* tp_init */
3216 PyType_GenericNew
/* tp_new */
3225 if (PyType_Ready(&PyNullImporter_Type
) < 0)
3228 m
= Py_InitModule4("imp", imp_methods
, doc_imp
,
3229 NULL
, PYTHON_API_VERSION
);
3232 d
= PyModule_GetDict(m
);
3236 if (setint(d
, "SEARCH_ERROR", SEARCH_ERROR
) < 0) goto failure
;
3237 if (setint(d
, "PY_SOURCE", PY_SOURCE
) < 0) goto failure
;
3238 if (setint(d
, "PY_COMPILED", PY_COMPILED
) < 0) goto failure
;
3239 if (setint(d
, "C_EXTENSION", C_EXTENSION
) < 0) goto failure
;
3240 if (setint(d
, "PY_RESOURCE", PY_RESOURCE
) < 0) goto failure
;
3241 if (setint(d
, "PKG_DIRECTORY", PKG_DIRECTORY
) < 0) goto failure
;
3242 if (setint(d
, "C_BUILTIN", C_BUILTIN
) < 0) goto failure
;
3243 if (setint(d
, "PY_FROZEN", PY_FROZEN
) < 0) goto failure
;
3244 if (setint(d
, "PY_CODERESOURCE", PY_CODERESOURCE
) < 0) goto failure
;
3245 if (setint(d
, "IMP_HOOK", IMP_HOOK
) < 0) goto failure
;
3247 Py_INCREF(&PyNullImporter_Type
);
3248 PyModule_AddObject(m
, "NullImporter", (PyObject
*)&PyNullImporter_Type
);
3254 /* API for embedding applications that want to add their own entries
3255 to the table of built-in modules. This should normally be called
3256 *before* Py_Initialize(). When the table resize fails, -1 is
3257 returned and the existing table is unchanged.
3259 After a similar function by Just van Rossum. */
3262 PyImport_ExtendInittab(struct _inittab
*newtab
)
3264 static struct _inittab
*our_copy
= NULL
;
3268 /* Count the number of entries in both tables */
3269 for (n
= 0; newtab
[n
].name
!= NULL
; n
++)
3272 return 0; /* Nothing to do */
3273 for (i
= 0; PyImport_Inittab
[i
].name
!= NULL
; i
++)
3276 /* Allocate new memory for the combined table */
3278 PyMem_RESIZE(p
, struct _inittab
, i
+n
+1);
3282 /* Copy the tables into the new memory */
3283 if (our_copy
!= PyImport_Inittab
)
3284 memcpy(p
, PyImport_Inittab
, (i
+1) * sizeof(struct _inittab
));
3285 PyImport_Inittab
= our_copy
= p
;
3286 memcpy(p
+i
, newtab
, (n
+1) * sizeof(struct _inittab
));
3291 /* Shorthand to add a single entry given a name and a function */
3294 PyImport_AppendInittab(char *name
, void (*initfunc
)(void))
3296 struct _inittab newtab
[2];
3298 memset(newtab
, '\0', sizeof newtab
);
3300 newtab
[0].name
= name
;
3301 newtab
[0].initfunc
= initfunc
;
3303 return PyImport_ExtendInittab(newtab
);