summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Doc/c-api/import.rst3
-rw-r--r--Python/import.c18
-rw-r--r--Python/sysmodule.c32
3 files changed, 24 insertions, 29 deletions
diff --git a/Doc/c-api/import.rst b/Doc/c-api/import.rst
index 6de3fb0..1f6b1e8 100644
--- a/Doc/c-api/import.rst
+++ b/Doc/c-api/import.rst
@@ -178,7 +178,8 @@ Importing Modules
.. c:function:: const char * PyImport_GetMagicTag()
Return the magic tag string for :pep:`3147` format Python bytecode file
- names.
+ names. Keep in mind that the value at ``sys.implementation.cache_tag`` is
+ authoritative and should be used instead of this function.
.. versionadded:: 3.2
diff --git a/Python/import.c b/Python/import.c
index c31819d..1592045 100644
--- a/Python/import.c
+++ b/Python/import.c
@@ -116,7 +116,7 @@ typedef unsigned short mode_t;
*/
#define MAGIC (3230 | ((long)'\r'<<16) | ((long)'\n'<<24))
#define CACHEDIR "__pycache__"
-/* Current magic word and string tag as globals. */
+/* Current magic word as global. */
static long pyc_magic = MAGIC;
/* See _PyImport_FixupExtensionObject() below */
@@ -520,22 +520,12 @@ PyImport_GetMagicNumber(void)
}
+extern const char * _PySys_ImplCacheTag;
+
const char *
PyImport_GetMagicTag(void)
{
- PyObject *impl, *tag;
- const char *raw_tag;
-
- /* We could also pull it from imp or importlib. */
- impl = PySys_GetObject("implementation");
- if (impl == NULL)
- return NULL;
- tag = PyObject_GetAttrString(impl, "cache_tag");
- if (tag == NULL)
- return NULL;
- raw_tag = PyUnicode_DATA(tag);
- Py_DECREF(tag);
- return raw_tag;
+ return _PySys_ImplCacheTag;
}
diff --git a/Python/sysmodule.c b/Python/sysmodule.c
index ce5e825..20bfa55 100644
--- a/Python/sysmodule.c
+++ b/Python/sysmodule.c
@@ -1478,6 +1478,22 @@ make_version_info(void)
return version_info;
}
+/* sys.implementation values */
+#define NAME "cpython"
+const char *_PySys_ImplName = NAME;
+#define QUOTE(arg) #arg
+#define STRIFY(name) QUOTE(name)
+#define MAJOR STRIFY(PY_MAJOR_VERSION)
+#define MINOR STRIFY(PY_MINOR_VERSION)
+#define TAG NAME "-" MAJOR MINOR;
+const char *_PySys_ImplCacheTag = TAG;
+#undef NAME
+#undef QUOTE
+#undef STRIFY
+#undef MAJOR
+#undef MINOR
+#undef TAG
+
static PyObject *
make_impl_info(PyObject *version_info)
{
@@ -1490,13 +1506,7 @@ make_impl_info(PyObject *version_info)
/* populate the dict */
-#define NAME "cpython"
-#define QUOTE(arg) #arg
-#define STRIFY(name) QUOTE(name)
-#define MAJOR STRIFY(PY_MAJOR_VERSION)
-#define MINOR STRIFY(PY_MINOR_VERSION)
-#define TAG NAME "-" MAJOR MINOR
- value = PyUnicode_FromString(NAME);
+ value = PyUnicode_FromString(_PySys_ImplName);
if (value == NULL)
goto error;
res = PyDict_SetItemString(impl_info, "name", value);
@@ -1504,19 +1514,13 @@ make_impl_info(PyObject *version_info)
if (res < 0)
goto error;
- value = PyUnicode_FromString(TAG);
+ value = PyUnicode_FromString(_PySys_ImplCacheTag);
if (value == NULL)
goto error;
res = PyDict_SetItemString(impl_info, "cache_tag", value);
Py_DECREF(value);
if (res < 0)
goto error;
-#undef NAME
-#undef QUOTE
-#undef STRIFY
-#undef MAJOR
-#undef MINOR
-#undef TAG
res = PyDict_SetItemString(impl_info, "version", version_info);
if (res < 0)