При портировании python 2.5 на 3.X, как заменить «с <module>import *»? - PullRequest
0 голосов
/ 20 февраля 2020

У меня есть пакет python 2.5 со следующей структурой:

enter image description here

Config.py содержит следующую строку:

from CommonDefines import *

Запуск этого кода в 3.7 дает следующее исключение:

Файл "../../.\ConfigLib\Config.py", строка 7, из импорта CommonDefines * ModuleNotFoundError: Нет модуля с именем CommonDefines

Замена этой строки на:

from .CommonDefines import *

... работает в 3.7, но выдает следующую ошибку в 2.5:

SyntaxError: 'import *' не разрешен с 'from.'

Есть ли способ написать эту строку, чтобы она работала как в 2.5, так и в 3.X?

РЕДАКТИРОВАТЬ:

Следующее не работает, так как второй импорт вызывает синтаксическую ошибку в 2,5

try:
    from CommonDefines import *
except:
    from .CommonDefines import *

SyntaxError: 'import *' не допускается с «от.»

1 Ответ

1 голос
/ 20 февраля 2020

Я бы просто использовал правильный импорт по имени, но это можно сделать хакерским способом, для личного использования, используя exec:

try:
    from CommonDefines import *
except ModuleNotFoundError:
    exec('from .CommonDefines import *')

Вы даже можете поменять их местами и поймать SyntaxError.

...