Разница между 'из конфигурации импорта пилонов' и 'импорта pylons.config' - PullRequest
2 голосов
/ 08 декабря 2011

Я пытаюсь импортировать модуль компании в свое программное обеспечение, и я получаю ошибку:

ImportError: No module named config

от

from pylons.config import config

Очевидно, что импортируемый им модуль требует pylons.config, но не может найти его в моей виртуальной среде.

Если я иду в терминал и пробую некоторые скрипты Python, я могу найти файл конфигурации, если я пытаюсь:

from pylons import config

но произойдет ошибка, если я попытаюсь:

import pylons.config

Почему это?

И кто-нибудь знает, как и где я могу получить:

 from pylons.config import config

на работу. Учитывая, что я не могу изменить код для этого модуля, только мой, который импортирует его или мои собственные системные файлы.


UPDATE

Если у кого-либо, обнаружившего эту страницу, возникает подобная проблема, вы можете обнаружить, что пытаетесь запустить два модуля с разными версиями Pylons.

Например, вы создаете приложение для входа в систему с именем myApp . У вас есть несколько модулей Python, которые помогают с обработкой входа в систему pyLogin .

Сначала вы устанавливаете pyLogin с python setup.py install . Это добавляет библиотеки в пакеты вашего сайта и обновляет все библиотеки, от которых зависит, например, SqlAlchemy.

Затем вы устанавливаете myApp таким же образом, который снова обновляет библиотеки и зависимости.

Эта проблема возникает, если pyLogin и myApp используют разные версии Pylons. Если pyLogin использует Pylons 0.9.6, а myApp использует Pylons 1.0, например, то код pyLogin будет вызываться из myApp но он будет работать в неправильной структуре Pylons и, следовательно, потребует EITH из конфигурации импорта pylons или из конфигурации импорта pylons.config , но будет работать только с одним из них. Если он использует неправильный вызов для Pylons, вы увидите это сообщение об ошибке.

Таким образом, единственное решение этой ошибки - либо найти более ранние или более поздние библиотеки, которые используют ту же версию Pylons, что и ваше приложение, либо преобразовать ваше приложение в ту же версию Pylons, что и библиотеки, которые вы используете.

1 Ответ

4 голосов
/ 08 декабря 2011

Существует различие между двумя использованиями ...

import загружает модуль Python в его собственное пространство имен , тогда как from загружает модуль Python в текущее пространство имен .

Итак, использование from pylons import config импортирует конфигурацию в ваше текущее пространство имен.Но попытка импортировать class или function с использованием import невозможна, поскольку нет пространства имен для их хранения ... Вы можете импортировать только модули и использоватьfunctions или classes, вызывая их с собственным пространством имен, например

import pylons
....
pylons.config #to retreive config

Подробнее об импорте в Python

...