У меня есть пользовательский модуль в одном из каталогов в моем PYTHONPATH с тем же именем, что и у одного из модулей стандартной библиотеки, поэтому, когда я import module_name
, этот модуль загружается. Если я хочу использовать исходный модуль стандартной библиотеки, есть ли способ заставить Python импортировать из стандартной библиотеки, а не из каталога PYTHONPATH, если не считать переименования пользовательского модуля и изменения каждой ссылки, чтобы она указывала на новое имя?
Модуль принудительного импорта из стандартной библиотеки Python вместо PYTHONPATH по умолчанию
Ответы (3)
Идеальным решением было бы переименовать ваш модуль во что-то, чего нет в стандартной библиотеке.
Вы также можете включить абсолютный импорт. если вы используете Python 2.5+:
from __future__ import absolute_import
person
Luper Rouch
schedule
01.06.2010
Как мне использовать относительный импорт, чтобы получить стандартную версию библиотеки?
- person jrdioko; 01.06.2010
абсолютный импорт не поможет вам, если у вас есть модуль в PYTHONPATH, который скрывает модуль stdlib.
- person jfs; 23.03.2015
Не надо.
Если вы случайно выбрали стандартное имя модуля библиотеки, измените имя модуля, чтобы прекратить конфликт.
person
S.Lott
schedule
01.06.2010
Это, вероятно, лучшее решение, как для того, чтобы не вызывать путаницы у посещающих программистов, так и для того факта, что поведение при импорте модуля, который еще не был относительным импортом, не изменится при включенном абсолютном импорте.
- person Matt Joiner; 18.03.2011
Это очевидный ответ, но меня немного раздражает, что стандартной библиотеке разрешено использовать пространство имен таким образом по соглашению. Это огромная! И он содержит много общих слов, связанных с кодом, таких как оба типа и типизация. И он все время растет.
- person mszegedy; 09.06.2019
Вы можете выбрать модуль, который хотите импортировать, с помощью модуля imp:
import imp
mymodule = imp.load_module(name, file, pathname, description)
person
joaquin
schedule
01.06.2010
grep
, так что не должно быть слишком сложно найти каждый из них и исправить их. - person S.Lott   schedule 02.06.2010PYTHONPATH
не локальны. Абсолютный импорт здесь не поможет. Не затеняйте модули stdlib, иначе вы сломаете любой код, который не ожидает вашего пользовательского модуля. Если вам нужно, вы можете переместить соответствующий каталог в начало спискаsys.path
в файле*.pth
или в своем коде, но правильным решением будет переименовать модуль как предложил @S.Lott, например, поместите его в свое собственное пространство имен:import jrdioko.module_name as module_name
. - person jfs   schedule 22.03.2015