我如何告诉 django-admin 使用哪个设置模块?
How do I tell django-admin which settings module to use?
当我 运行 django-admin
与 --settings
切换时,它失败了:
(env) $ django-admin help --settings=myapp.settings
Traceback (most recent call last):
File "/srv/http/myapp/env/bin/django-admin", line 11, in <module>
sys.exit(execute_from_command_line())
File "/srv/http/myapp/env/lib/python3.5/site-packages/django/core/management/__init__.py", line 367, in execute_from_command_line
utility.execute()
File "/srv/http/myapp/env/lib/python3.5/site-packages/django/core/management/__init__.py", line 316, in execute
settings.INSTALLED_APPS
File "/srv/http/myapp/env/lib/python3.5/site-packages/django/conf/__init__.py", line 53, in __getattr__
self._setup(name)
File "/srv/http/myapp/env/lib/python3.5/site-packages/django/conf/__init__.py", line 41, in _setup
self._wrapped = Settings(settings_module)
File "/srv/http/myapp/env/lib/python3.5/site-packages/django/conf/__init__.py", line 97, in __init__
mod = importlib.import_module(self.SETTINGS_MODULE)
File "/usr/lib/python3.5/importlib/__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 986, in _gcd_import
File "<frozen importlib._bootstrap>", line 969, in _find_and_load
File "<frozen importlib._bootstrap>", line 944, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 222, in _call_with_frames_removed
File "<frozen importlib._bootstrap>", line 986, in _gcd_import
File "<frozen importlib._bootstrap>", line 969, in _find_and_load
File "<frozen importlib._bootstrap>", line 956, in _find_and_load_unlocked
ImportError: No module named 'myapp'
(env) $ ls myapp/settings.py
myapp/settings.py
但是 manage.py
工作正常。为了清楚起见,我想为开发环境提供额外的settings.py
。
此外,从此脚本导入设置:
#!/usr/bin/env python
import myapp.settings
也有效。
好吧,the doc 确实说:
manage.py
does the same thing as django-admin
but takes care of a few things for you:
It puts your project’s package on sys.path
.
It sets the DJANGO_SETTINGS_MODULE
environment variable so that it points to your project’s settings.py
file.
但它也说:
If you need to switch between multiple Django settings files, use django-admin
with DJANGO_SETTINGS_MODULE
or the --settings
command line option.
并且所有示例都遵循以下几行:
$ django-admin migrate --settings=mysite.settings
重要的是它可以工作 your project dir must be in sys.path
。实现这一目标的一种方法是:
PYTHONPATH=/path/to/project django-admin help --settings=myapp.settings
或者你可以使用--pythonpath开关,或者提前设置PYTHONPATH
。
当我 运行 django-admin
与 --settings
切换时,它失败了:
(env) $ django-admin help --settings=myapp.settings
Traceback (most recent call last):
File "/srv/http/myapp/env/bin/django-admin", line 11, in <module>
sys.exit(execute_from_command_line())
File "/srv/http/myapp/env/lib/python3.5/site-packages/django/core/management/__init__.py", line 367, in execute_from_command_line
utility.execute()
File "/srv/http/myapp/env/lib/python3.5/site-packages/django/core/management/__init__.py", line 316, in execute
settings.INSTALLED_APPS
File "/srv/http/myapp/env/lib/python3.5/site-packages/django/conf/__init__.py", line 53, in __getattr__
self._setup(name)
File "/srv/http/myapp/env/lib/python3.5/site-packages/django/conf/__init__.py", line 41, in _setup
self._wrapped = Settings(settings_module)
File "/srv/http/myapp/env/lib/python3.5/site-packages/django/conf/__init__.py", line 97, in __init__
mod = importlib.import_module(self.SETTINGS_MODULE)
File "/usr/lib/python3.5/importlib/__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 986, in _gcd_import
File "<frozen importlib._bootstrap>", line 969, in _find_and_load
File "<frozen importlib._bootstrap>", line 944, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 222, in _call_with_frames_removed
File "<frozen importlib._bootstrap>", line 986, in _gcd_import
File "<frozen importlib._bootstrap>", line 969, in _find_and_load
File "<frozen importlib._bootstrap>", line 956, in _find_and_load_unlocked
ImportError: No module named 'myapp'
(env) $ ls myapp/settings.py
myapp/settings.py
但是 manage.py
工作正常。为了清楚起见,我想为开发环境提供额外的settings.py
。
此外,从此脚本导入设置:
#!/usr/bin/env python
import myapp.settings
也有效。
好吧,the doc 确实说:
manage.py
does the same thing asdjango-admin
but takes care of a few things for you:
It puts your project’s package on
sys.path
.It sets the
DJANGO_SETTINGS_MODULE
environment variable so that it points to your project’ssettings.py
file.
但它也说:
If you need to switch between multiple Django settings files, use
django-admin
withDJANGO_SETTINGS_MODULE
or the--settings
command line option.
并且所有示例都遵循以下几行:
$ django-admin migrate --settings=mysite.settings
重要的是它可以工作 your project dir must be in sys.path
。实现这一目标的一种方法是:
PYTHONPATH=/path/to/project django-admin help --settings=myapp.settings
或者你可以使用--pythonpath开关,或者提前设置PYTHONPATH
。