У меня есть ситуация, когда один и тот же модуль Python присутствует в одном и том же каталоге в двух разных версиях; mymodule.py
и mymodule.so
(я получаю последнее из первого через Cython, но это не имеет отношения к моему вопросу). Когда из Python я делаю
import mymodule
всегда выбирает mymodule.so
. Иногда я действительно хочу импортировать mymodule.py
вместо этого. Я мог бы временно переместить mymodule.so
в другое место, но это не очень хорошо, если у меня одновременно работает другой экземпляр Python, которому нужно импортировать mymodule.so
.
Вопрос в том, как заставить import
отдавать предпочтение .py
файлам вместо .so
, а не наоборот?
Вот мои мысли о решении:
Я представляю себе магию, используя importlib
и, возможно, редактирую sys.meta_path
. В частности, я вижу, что sys.meta_path[2]
содержит _frozen_importlib_external.PathFinder
, который используется для импорта внешних модулей, то есть это используется как для mymodule.py
, так и mymodule.so
. Если бы я мог просто заменить это на аналогичный PathFinder
, который использовал обратный порядок для типов файлов, у меня было бы решение.
Я использую Python 3.7, если это влияет на решение.
Редактировать
Обратите внимание, что простое чтение в исходных строках mymodule.py
и exec
их не подойдет, поскольку mymodule.py
может сам импортировать другие модули, которые снова существуют в версиях .py
и .so
. (Я хочу импортировать .py
версию этих версий).