2016-05-26 4 views
1

私は2つのDjangoプロジェクト、foobarを持っており、その構造を以下に示します。別のDjangoプロジェクトからサブプロセスを呼び出すことによってDjangoサーバを実行します

/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 

どうすれば解決できますか?

答えて

0

をあなたは正しい、それはすべての:-)でどんな意味がありません(私はこの動作は全く意味がありませんが、これが唯一の単なるデモンストレーションの目的である。知っている)しかし、あなたが本当にことをしたい場合は、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. 
+0

を実際に私がそうしたい私は、これはなるだろう願っています(foo' 'からコマンドを送信することにより、' bar'のモデルを操作することですもっと意味がある) – amigcamel

+0

これはちょっとしたことですが、IMHOではHTTP API経由でコマンドを送信する方が便利です。あなたは上記の解決策を試しましたか?それは動作しましたか?そうでない場合、何が起こったのですか? –

+0

すべてがうまく動作します、ありがとう。しかし、 'os.environ ['DJANGO_SETTINGS_MODULE']'を変更すると、副作用はありますか?私はまだ元の環境を保持したい。 – amigcamel

関連する問題