New issue 2818: __module__ read-only for PyCFunction objects https://bitbucket.org/pypy/pypy/issues/2818/__module__-read-only-for-pycfunction
Hrvoje Nikšić: Our CPython extensions sometimes create functions in C and modify their `__module__` later. This is needed because those functions are referenced by `__reduce__`, and we don't want their internal implementation module to leak into pickled files. Instead, we change `fn.__module__` from `bla._internal` to `bla`, which is correct because `bla.fn` really exists. This works in CPython, but fails in PyPy with a `TypeError`: ``` TypeError: readonly attribute '__module__' ``` The functions are created using `Py_InitModule3` and retrieved using `PyObject_GetAttr` or equivalent. A minimal example of code that works under CPython, but fails under PyPy is attached. Under CPython it successfully sets `fn.__module__`, while on PyPy it fails as described above. We could probably work around the issue by replacing the `PyCFunction` with a custom-created callable with a writable `__module__`, but I am reporting this as an incompatibility with CPython's API. _______________________________________________ pypy-issue mailing list pypy-issue@python.org https://mail.python.org/mailman/listinfo/pypy-issue