Загрузка нативных библиотек Python - PullRequest
2 голосов
/ 02 декабря 2011

Python 2.7 поставляется с библиотекой json. В мою PYTHONPATH я включаю сторонние источники, и один из них также называется json. В результате мы загрузили неверную библиотеку json. Что было бы хорошей практикой, чтобы справляться и избегать ситуаций, подобных описанным выше? Есть ли способ указать Python явно загружать нативную библиотеку таким образом from ? import json.

Ответы [ 2 ]

2 голосов
/ 02 декабря 2011

На самом деле нет хорошего способа иметь несколько модулей с одинаковым именем в PYTHONPATH [docs] , это означает, что вам, вероятно, следует переместить третийотправьте модуль json в другое место, которое не находится в PYTHONPATH, а затем импортируйте его другим способом.

Самый простой способ сделать это - переместить сторонний модуль json в подкаталог того расположения, в котором он находитсяуже в, а затем сделайте этот подкаталог модулем, добавив к нему __init__.py.

Если вы назвали этот новый каталог 'thirdparty', вы можете импортировать свой сторонний модуль json, используя from thirdparty import json, и import json всегда импортирует json-модуль Python.

Кроме того, вы можете переименовать модуль во что-то, что не конфликтует.

2 голосов
/ 02 декабря 2011

Вы можете попробовать

from path import json as anotherjson

Таким образом, конфликт пространства имен может быть удален.

Также вы можете увидеть дискуссии об относительном / абсолютном импорте.

Там написано:

В Python 2.5 вы можете переключить поведение импорта на абсолютный импорт используя директиву future import absolute_import. это поведение абсолютного импорта станет будущим по умолчанию (вероятно, Python 2.7). Как только абсолютный импорт по умолчанию, импорт строка всегда найдет версию стандартной библиотеки. Предлагается что пользователи должны начать использовать абсолютный импорт в максимально возможной степени.

from __future__ import absolute_import
# from standard path
import json as _json 
# from a package
from pkg import json as pkgjson

Другой способ - использовать модуль imp

import imp
json = imp.load_source('json', '/path/to/json.py')
...