Произвольные имена питонов с косой чертой в операторе импорта - PullRequest
2 голосов
/ 01 ноября 2011

Перебрал связанные вопросы, но не смог найти этот конкретный ответ.

Мы встраиваем python в наше приложение и добавили хук к sys.meta_path, чтобы разрешить импорт модулей с произвольно названными модулями.(То есть определения модулей не находятся на диске, а определяются в памяти в пакете).

Это допускает такие вещи, как:

import my_module_1#2#31421

или даже:

__import__("my_module_1#2#31321")

Проблема возникает, когда конкретная метка содержит косую черту.

import my_module_1/123/56

или

__import__("my_module_1/123/56")

Создается следующая ошибка, даже до чтениямой meta_path hook.

ImportError: импорт по имени файла не поддерживается.

Я также пробовал такие вещи, как:

import imp imp.load_source('my_module_1', '123/56')

Но, опять же, этодаже не достигает ловушки meta_path.Произвольные имена, которые мне нужно передать, на самом деле похожи на «путь», но не относятся к путям на диске.

У кого-нибудь есть предложения?

Большое спасибо, Роб.

1 Ответ

0 голосов
/ 01 ноября 2011

Что ж, очевидный обходной путь - это использовать какой-либо другой символ в источниках, например, pipe, и заставить ваш хук заменить такие символы косыми чертами.Однако в зависимости от того, что именно вам нужно, это будет более или менее болезненно.

Например,

import lol|foo

, где первая строка вашего крючка выглядит как

module_name = module_name.replace ('|', '/')
...