У меня есть унаследованная программа python, которая определила модуль, имя которого конфликтует с системным модулем в текущем python, что самый простой способ исправить это? Этот модуль был импортирован во многих местах, поэтому было бы здорово, если бы не было необходимости менять старый источник python.
Вы можете создать пользовательскую процедуру импорта, используя imp module
. Например, здесь я импортирую модуль с именем string
, который затеняет настоящий строковый модуль:
import imp
def user_import(name, path):
mod_file, mod_path, mod_desc = imp.find_module(name, [path])
return imp.load_module(name, mod_file, mod_path, mod_desc)
# load the real 'string' module
import string
print string.digits
# load the user 'string' module which lives under the path './foo'
mod = user_import('string', './foo')
print mod.digits
Вывод:
0123456789
thesearenotdigits
Вы всегда можете переименовать модуль при его импорте, например:
import sys как realsys
realsys.exit(1)
Похоже, вам нужно будет сделать это либо для системного модуля, имя которого вы перегрузили, либо для вашего модуля, в зависимости от того, что вызывает наименьшую боль.
В нижней строке, когда вы создаете модули, полезно более полно квалифицировать имя, например. вместо создания sys
(в этом примере) вы могли бы создать mylib.sys
.