运行 Django 服务器通过从另一个 Django 项目调用子进程
run Django server by calling subprocess from another Django project
我有两个Django项目,foo
和bar
,结构如下图
/tmp/foo
- foo
- __init__.py
- settings.py
- urls.py
- wsgi.py
/tmp/bar
- bar
- __init__.py
- settings.py
- urls.py
- wsgi.py
我尝试在 foo
的环境中 运行 python3 /tmp/bar/manage.py runserver
但失败了。
$ python3 /tmp/foo/manage.py shell
>>> import subprocess
>>> subprocess.call(['python3', '/tmp/bar/manage.py', 'runserver'])
Traceback (most recent call last):
File "/tmp/bar/manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/usr/local/lib/python3.4/dist-packages/django/core/management/__init__.py", line 353, in execute_from_command_line
utility.execute()
File "/usr/local/lib/python3.4/dist-packages/django/core/management/__init__.py", line 302, in execute
settings.INSTALLED_APPS
File "/usr/local/lib/python3.4/dist-packages/django/conf/__init__.py", line 55, in __getattr__
self._setup(name)
File "/usr/local/lib/python3.4/dist-packages/django/conf/__init__.py", line 43, in _setup
self._wrapped = Settings(settings_module)
File "/usr/local/lib/python3.4/dist-packages/django/conf/__init__.py", line 99, in __init__
mod = importlib.import_module(self.SETTINGS_MODULE)
File "/usr/lib/python3.4/importlib/__init__.py", line 109, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 2254, in _gcd_import
File "<frozen importlib._bootstrap>", line 2237, in _find_and_load
File "<frozen importlib._bootstrap>", line 2212, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 321, in _call_with_frames_removed
File "<frozen importlib._bootstrap>", line 2254, in _gcd_import
File "<frozen importlib._bootstrap>", line 2237, in _find_and_load
File "<frozen importlib._bootstrap>", line 2224, in _find_and_load_unlocked
ImportError: No module named 'foo'
1
我该如何解决这个问题?
(我知道这种行为根本没有意义,但这只是为了演示目的。)
你是对的,它根本没有任何意义 :-) 但是如果你真的想这样做,你需要覆盖 DJANGO_SETTINGS_MODULE 环境变量:
>>> import subprocess
>>> import os
>>> os.environ['DJANGO_SETTINGS_MODULE'] = 'bar.settings'
>>> subprocess.call(['python3', '/tmp/bar/manage.py', 'runserver'])
Performing system checks...
System check identified no issues (0 silenced).
May 26, 2016 - 15:52:08
Django version 1.9.6, using settings 'bar.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
我有两个Django项目,foo
和bar
,结构如下图
/tmp/foo
- foo
- __init__.py
- settings.py
- urls.py
- wsgi.py
/tmp/bar
- bar
- __init__.py
- settings.py
- urls.py
- wsgi.py
我尝试在 foo
的环境中 运行 python3 /tmp/bar/manage.py runserver
但失败了。
$ python3 /tmp/foo/manage.py shell
>>> import subprocess
>>> subprocess.call(['python3', '/tmp/bar/manage.py', 'runserver'])
Traceback (most recent call last):
File "/tmp/bar/manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/usr/local/lib/python3.4/dist-packages/django/core/management/__init__.py", line 353, in execute_from_command_line
utility.execute()
File "/usr/local/lib/python3.4/dist-packages/django/core/management/__init__.py", line 302, in execute
settings.INSTALLED_APPS
File "/usr/local/lib/python3.4/dist-packages/django/conf/__init__.py", line 55, in __getattr__
self._setup(name)
File "/usr/local/lib/python3.4/dist-packages/django/conf/__init__.py", line 43, in _setup
self._wrapped = Settings(settings_module)
File "/usr/local/lib/python3.4/dist-packages/django/conf/__init__.py", line 99, in __init__
mod = importlib.import_module(self.SETTINGS_MODULE)
File "/usr/lib/python3.4/importlib/__init__.py", line 109, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 2254, in _gcd_import
File "<frozen importlib._bootstrap>", line 2237, in _find_and_load
File "<frozen importlib._bootstrap>", line 2212, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 321, in _call_with_frames_removed
File "<frozen importlib._bootstrap>", line 2254, in _gcd_import
File "<frozen importlib._bootstrap>", line 2237, in _find_and_load
File "<frozen importlib._bootstrap>", line 2224, in _find_and_load_unlocked
ImportError: No module named 'foo'
1
我该如何解决这个问题?
(我知道这种行为根本没有意义,但这只是为了演示目的。)
你是对的,它根本没有任何意义 :-) 但是如果你真的想这样做,你需要覆盖 DJANGO_SETTINGS_MODULE 环境变量:
>>> import subprocess
>>> import os
>>> os.environ['DJANGO_SETTINGS_MODULE'] = 'bar.settings'
>>> subprocess.call(['python3', '/tmp/bar/manage.py', 'runserver'])
Performing system checks...
System check identified no issues (0 silenced).
May 26, 2016 - 15:52:08
Django version 1.9.6, using settings 'bar.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.