python: remove automatic compiled module loading (.pyc files)
This commit is contained in:
parent
1f9bdb6f5d
commit
b80684a1d2
|
@ -88,16 +88,11 @@ struct filedescr * _PyImport_Filetab = NULL;
|
||||||
#ifdef RISCOS
|
#ifdef RISCOS
|
||||||
static const struct filedescr _PyImport_StandardFiletab[] = {
|
static const struct filedescr _PyImport_StandardFiletab[] = {
|
||||||
{"/py", "U", PY_SOURCE},
|
{"/py", "U", PY_SOURCE},
|
||||||
{"/pyc", "rb", PY_COMPILED},
|
|
||||||
{0, 0}
|
{0, 0}
|
||||||
};
|
};
|
||||||
#else
|
#else
|
||||||
static const struct filedescr _PyImport_StandardFiletab[] = {
|
static const struct filedescr _PyImport_StandardFiletab[] = {
|
||||||
{".py", "U", PY_SOURCE},
|
{".py", "U", PY_SOURCE},
|
||||||
#ifdef MS_WINDOWS
|
|
||||||
{".pyw", "U", PY_SOURCE},
|
|
||||||
#endif
|
|
||||||
{".pyc", "rb", PY_COMPILED},
|
|
||||||
{0, 0}
|
{0, 0}
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
@ -688,69 +683,6 @@ PyImport_ExecCodeModuleEx(char *name, PyObject *co, char *pathname)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Given a pathname for a Python source file, fill a buffer with the
|
|
||||||
pathname for the corresponding compiled file. Return the pathname
|
|
||||||
for the compiled file, or NULL if there's no space in the buffer.
|
|
||||||
Doesn't set an exception. */
|
|
||||||
|
|
||||||
static char *
|
|
||||||
make_compiled_pathname(char *pathname, char *buf, size_t buflen)
|
|
||||||
{
|
|
||||||
size_t len = strlen(pathname);
|
|
||||||
if (len+2 > buflen)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
#ifdef MS_WINDOWS
|
|
||||||
/* Treat .pyw as if it were .py. The case of ".pyw" must match
|
|
||||||
that used in _PyImport_StandardFiletab. */
|
|
||||||
if (len >= 4 && strcmp(&pathname[len-4], ".pyw") == 0)
|
|
||||||
--len; /* pretend 'w' isn't there */
|
|
||||||
#endif
|
|
||||||
memcpy(buf, pathname, len);
|
|
||||||
buf[len] = Py_OptimizeFlag ? 'o' : 'c';
|
|
||||||
buf[len+1] = '\0';
|
|
||||||
|
|
||||||
return buf;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* Given a pathname for a Python source file, its time of last
|
|
||||||
modification, and a pathname for a compiled file, check whether the
|
|
||||||
compiled file represents the same version of the source. If so,
|
|
||||||
return a FILE pointer for the compiled file, positioned just after
|
|
||||||
the header; if not, return NULL.
|
|
||||||
Doesn't set an exception. */
|
|
||||||
|
|
||||||
static FILE *
|
|
||||||
check_compiled_module(char *pathname, time_t mtime, char *cpathname)
|
|
||||||
{
|
|
||||||
FILE *fp;
|
|
||||||
long magic;
|
|
||||||
long pyc_mtime;
|
|
||||||
|
|
||||||
fp = fopen(cpathname, "rb");
|
|
||||||
if (fp == NULL)
|
|
||||||
return NULL;
|
|
||||||
magic = PyMarshal_ReadLongFromFile(fp);
|
|
||||||
if (magic != pyc_magic) {
|
|
||||||
if (Py_VerboseFlag)
|
|
||||||
PySys_WriteStderr("# %s has bad magic\n", cpathname);
|
|
||||||
fclose(fp);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
pyc_mtime = PyMarshal_ReadLongFromFile(fp);
|
|
||||||
if (pyc_mtime != mtime) {
|
|
||||||
if (Py_VerboseFlag)
|
|
||||||
PySys_WriteStderr("# %s has bad mtime\n", cpathname);
|
|
||||||
fclose(fp);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
if (Py_VerboseFlag)
|
|
||||||
PySys_WriteStderr("# %s matches %s\n", cpathname, pathname);
|
|
||||||
return fp;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* Read a code object from a file and check it for validity */
|
/* Read a code object from a file and check it for validity */
|
||||||
|
|
||||||
static PyCodeObject *
|
static PyCodeObject *
|
||||||
|
@ -854,47 +786,6 @@ open_exclusive(char *filename)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Write a compiled module to a file, placing the time of last
|
|
||||||
modification of its source into the header.
|
|
||||||
Errors are ignored, if a write error occurs an attempt is made to
|
|
||||||
remove the file. */
|
|
||||||
|
|
||||||
static void
|
|
||||||
write_compiled_module(PyCodeObject *co, char *cpathname, time_t mtime)
|
|
||||||
{
|
|
||||||
FILE *fp;
|
|
||||||
|
|
||||||
fp = open_exclusive(cpathname);
|
|
||||||
if (fp == NULL) {
|
|
||||||
if (Py_VerboseFlag)
|
|
||||||
PySys_WriteStderr(
|
|
||||||
"# can't create %s\n", cpathname);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
PyMarshal_WriteLongToFile(pyc_magic, fp, Py_MARSHAL_VERSION);
|
|
||||||
/* First write a 0 for mtime */
|
|
||||||
PyMarshal_WriteLongToFile(0L, fp, Py_MARSHAL_VERSION);
|
|
||||||
PyMarshal_WriteObjectToFile((PyObject *)co, fp, Py_MARSHAL_VERSION);
|
|
||||||
if (fflush(fp) != 0 || ferror(fp)) {
|
|
||||||
if (Py_VerboseFlag)
|
|
||||||
PySys_WriteStderr("# can't write %s\n", cpathname);
|
|
||||||
/* Don't keep partial file */
|
|
||||||
fclose(fp);
|
|
||||||
(void) unlink(cpathname);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
/* Now write the true mtime */
|
|
||||||
fseek(fp, 4L, 0);
|
|
||||||
assert(mtime < LONG_MAX);
|
|
||||||
PyMarshal_WriteLongToFile((long)mtime, fp, Py_MARSHAL_VERSION);
|
|
||||||
fflush(fp);
|
|
||||||
fclose(fp);
|
|
||||||
if (Py_VerboseFlag)
|
|
||||||
PySys_WriteStderr("# wrote %s\n", cpathname);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* Load a source module from a given file and return its module
|
/* Load a source module from a given file and return its module
|
||||||
object WITH INCREMENTED REFERENCE COUNT. If there's a matching
|
object WITH INCREMENTED REFERENCE COUNT. If there's a matching
|
||||||
byte-compiled file, use that instead. */
|
byte-compiled file, use that instead. */
|
||||||
|
@ -905,7 +796,6 @@ load_source_module(char *name, char *pathname, FILE *fp)
|
||||||
time_t mtime;
|
time_t mtime;
|
||||||
FILE *fpc;
|
FILE *fpc;
|
||||||
char buf[MAXPATHLEN+1];
|
char buf[MAXPATHLEN+1];
|
||||||
char *cpathname;
|
|
||||||
PyCodeObject *co;
|
PyCodeObject *co;
|
||||||
PyObject *m;
|
PyObject *m;
|
||||||
|
|
||||||
|
@ -927,31 +817,12 @@ load_source_module(char *name, char *pathname, FILE *fp)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
cpathname = make_compiled_pathname(pathname, buf,
|
co = parse_source_module(pathname, fp);
|
||||||
(size_t)MAXPATHLEN + 1);
|
if (co == NULL)
|
||||||
if (cpathname != NULL &&
|
return NULL;
|
||||||
(fpc = check_compiled_module(pathname, mtime, cpathname))) {
|
if (Py_VerboseFlag)
|
||||||
co = read_compiled_module(cpathname, fpc);
|
PySys_WriteStderr("import %s # from %s\n",
|
||||||
fclose(fpc);
|
name, pathname);
|
||||||
if (co == NULL)
|
|
||||||
return NULL;
|
|
||||||
if (Py_VerboseFlag)
|
|
||||||
PySys_WriteStderr("import %s # precompiled from %s\n",
|
|
||||||
name, cpathname);
|
|
||||||
pathname = cpathname;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
co = parse_source_module(pathname, fp);
|
|
||||||
if (co == NULL)
|
|
||||||
return NULL;
|
|
||||||
if (Py_VerboseFlag)
|
|
||||||
PySys_WriteStderr("import %s # from %s\n",
|
|
||||||
name, pathname);
|
|
||||||
|
|
||||||
if(0) /* disabled this for now -- cinap */
|
|
||||||
if (cpathname)
|
|
||||||
write_compiled_module(co, cpathname, mtime);
|
|
||||||
}
|
|
||||||
m = PyImport_ExecCodeModuleEx(name, (PyObject *)co, pathname);
|
m = PyImport_ExecCodeModuleEx(name, (PyObject *)co, pathname);
|
||||||
Py_DECREF(co);
|
Py_DECREF(co);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue