Найти - Пользователи
Полная версия: Разница между импортами
Начало » Python для новичков » Разница между импортами
1
Singularity
>>> import django
>>> d = django.db
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'db'
>>> from django import db as d
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/ihor/.virtualenvs/django/local/lib/python2.7/site-packages/django/db/__init__.py", line 11, in <module>
    if settings.DATABASES and DEFAULT_DB_ALIAS not in settings.DATABASES:
  File "/home/ihor/.virtualenvs/django/local/lib/python2.7/site-packages/django/conf/__init__.py", line 53, in __getattr__
    self._setup(name)
  File "/home/ihor/.virtualenvs/django/local/lib/python2.7/site-packages/django/conf/__init__.py", line 46, in _setup
    % (desc, ENVIRONMENT_VARIABLE))
django.core.exceptions.ImproperlyConfigured: Requested setting DATABASES, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.
почему так ?
Lexander
Это связано с пространствами имен (namespace) в Питоне.
Во втором случае при импорте атрибуты модуля импортируются в локальное пространство имен автоматически.
В первом случае этого не происходит.

Почитайте о namespace и import.
Lexander
Чтобы посмотреть, что доступно в модуле без импорта в локальное пространство имен, можно использовать
dir(django)
Как видим, здесь действительно нет db
Lexander
Ну, и для полного закрепления, так сказать, разница между модулями и пакетами, об их устройстве и последовательности импорта из того и другого есть в документации.
Singularity
Lexander
тут можно посты править. хотя ты вроде знаешь
Lexander
Они потом на почту приходят неправильно.
Поэтому на данный момент лучше добавить новый пост.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB