Django import LOCAL settings 문제.
원문링크 : https://stackoverflow.com/questions/22904209/django-cannot-import-local-settings
질문 by Brownbay
Django 1.7을 Python 3 에서 구동해 보았다.
그런데, manage.py 를 사용할 때, settings.py 의 import local_settings.py 부분이 문제가 생긴다.
settings.py 를 직접 실행할 때에는 local_settings.py 는 문제없이 임포트된다.
하지만, manage.py 를 실행하면, 아래와 같이 local_settings.py 모듈을 찾을 수 없다고 나온다.
local_settings.py 파일은 settings.py 와 같은 위치에 있다.
무엇이 문제일까?
EDIT: Playing around with Django 1.7... and Python 3
I can't seem to import local_settings.py into my settings.py file when using manage.py.
If I execute the settings.py file directly, my local_settings.py file is imported fine, without any errors.
However, when I run manage.py, it complains that it could not find the local_settings.py module. settings.py and local_settings.py are in the same folder...
Any ideas?
Traceback (most recent call last):
File "/home/cg/webdev/riv_com/lib/python3.4/site-packages/django/conf/__init__.py", line 94, in __init__
mod = importlib.import_module(self.SETTINGS_MODULE)
File "/usr/lib/python3.4/importlib/__init__.py", line 104, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 2231, in _gcd_import
File "<frozen importlib._bootstrap>", line 2214, in _find_and_load
File "<frozen importlib._bootstrap>", line 2203, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 1200, in _load_unlocked
File "<frozen importlib._bootstrap>", line 1129, in _exec
File "<frozen importlib._bootstrap>", line 1448, in exec_module
File "<frozen importlib._bootstrap>", line 321, in _call_with_frames_removed
File "/home/cg/webdev/riv_com/riv_com/riv_com/settings.py", line 79, in <module>
from local_settings import *
ImportError: No module named 'local_settings'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "./manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/home/cg/webdev/riv_com/lib/python3.4/site-packages/django/core/management/__init__.py", line 427, in execute_from_command_line
utility.execute()
File "/home/cg/webdev/riv_com/lib/python3.4/site-packages/django/core/management/__init__.py", line 386, in execute
settings.INSTALLED_APPS
File "/home/cg/webdev/riv_com/lib/python3.4/site-packages/django/conf/__init__.py", line 46, in __getattr__
self._setup(name)
File "/home/cg/webdev/riv_com/lib/python3.4/site-packages/django/conf/__init__.py", line 42, in _setup
self._wrapped = Settings(settings_module)
File "/home/cg/webdev/riv_com/lib/python3.4/site-packages/django/conf/__init__.py", line 98, in __init__
% (self.SETTINGS_MODULE, e)
ImportError: Could not import settings 'riv_com.settings' (Is it on sys.path? Is there an import error in the settings file?): No module named 'local_settings'
답변 by lanzz
Python 3.4는 implicit relative import (암묵적 상대경로 임포트)를 지원하지 않는다. 즉, Python3 에서 from local_settings import * 는 absolute import 절대경로 임포트이기 때문에, sys.path 에서만 local_settings 를 탐색하고, setttings.py 가 있는 디렉토리에서는 탐색경로에 포함되지 않는다. 이를 해결하기 위해선 명시적으로 relative import (상대경로 임포트)임을 알려주면 된다. 즉, from .local_settings import * 와 같이 하면 된다. 이 문법은 Python 2.7 에서도 동작한다.
Python 3.4 does not support implicit relative imports: from local_settings import * in Python 3 is an absolute import and would only search for a local_settings module in your sys.path, but NOT in the same directory where your settings.py module is. You need to use explicit relative import: from .local_settings import *; this would also work in Python 2.7.
Reference: PEP 328
'프로그래밍 > Python' 카테고리의 다른 글
[VS2013|PTVS] Python Tool for Visual Studio 가 동작하지 않았다. (0) | 2018.04.19 |
---|---|
offline virtualenv 시 문제. (0) | 2018.03.16 |
[Python|Django] 장고(django)에서 백만건을 가져오는 queryset이 느리다. (0) | 2018.02.12 |
[PYTHON3.6|PIP] in console_to_str return s.decode UnicodeDecodeError: 'utf-8' codec can't decode byte (0) | 2017.09.21 |
[Anaconda] 설치시 오류 : 'Destination Folder' cannot contain non-ascii characters (9) | 2017.09.15 |