42240


websocketのAPIから取得した株の価格を、Djangoで作成したモデル(DB)に保存させたいと考えています。  
[チュートリアル](https://docs.djangoproject.com/ja/2.0/intro/tutorial01/)通りにDjangoのアプリを作成し、以下のようなディレクトリ構造で常時動かしたいスクリプトを作成しました。

[code]

    mysite
      |-mysite
      |   |-settings.py
      |   |-...
      |-polls
      |   |-...
      |-logger
          |-ticker_logger.py ←これを新規で作成しました。
    
[/code]

[これ](https://qiita.com/Mabuchin/items/2c3cb1dc9f92f98fa22d)を参考に、ticker_logger.pyに以下のように記述しました。

[code]

    import os
    import sys
    import django
    
    sys.path.append(r'外側のmysiteフォルダへのフルパス')
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', "mysite.mysite.settings")
    django.setup()
    
    from mysite.polls.models import PriceLog
    
[/code]

すると、以下のようなエラーが発生してしまいます。

[code]

    Traceback (most recent call last):
      File "C:/Users/ユーザ名/PycharmProjects/WebTrader/mysite/logger/ticker_logger.py", line 14, in <module>
        django.setup()
      File "C:\Users\ユーザ名\.conda\envs\WebTrader\lib\site-packages\django\__init__.py", line 24, in setup
        apps.populate(settings.INSTALLED_APPS)
      File "C:\Users\ユーザ名\.conda\envs\WebTrader\lib\site-packages\django\apps\registry.py", line 89, in populate
        app_config = AppConfig.create(entry)
      File "C:\Users\ユーザ名\.conda\envs\WebTrader\lib\site-packages\django\apps\config.py", line 116, in create
        mod = import_module(mod_path)
      File "C:\Users\ユーザ名\.conda\envs\WebTrader\lib\importlib\__init__.py", line 126, in import_module
        return _bootstrap._gcd_import(name[level:], package, level)
      File "<frozen importlib._bootstrap>", line 994, in _gcd_import
      File "<frozen importlib._bootstrap>", line 971, in _find_and_load
      File "<frozen importlib._bootstrap>", line 941, in _find_and_load_unlocked
      File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
      File "<frozen importlib._bootstrap>", line 994, in _gcd_import
      File "<frozen importlib._bootstrap>", line 971, in _find_and_load
      File "<frozen importlib._bootstrap>", line 953, in _find_and_load_unlocked
    ModuleNotFoundError: No module named 'polls'
    
[/code]

どうすれば正常にモデルにアクセスできるようになるでしょうか？  
チュートリアルにあるDjangoの通常の動作はすべて動いているので、おそらくticker_logger.pyの内容に問題があるものと思いますが、どう修正すればよいのかわからず困っています。

使用している環境は、Windows10, Python3.6.4, Django2.0です。  
よろしくお願いいたします。


CC BY-SA 3.0
2018-02-04T05:19:26.797
41449
2021-12-06T11:01:30.137
27270
question
python python3 django
Djangoのモデルにアクセスできるスクリプト（常時起動させる）を設定したい

[code]

     sys.path.append(r'外側のmysiteフォルダへのフルパス')
    
[/code]

と書いてあるように、PYTHONPATHが通ってるのは外側のmysiteのフォルダです。  
なので、そこを起点に import する必要があるので、 `mysite.polls` ではなく、 `polls`
から始めればエラーは回避できると思います。

[code]

    # エラーになる
    from mysite.polls.models import PriceLog
    
    # エラーにならない
    from polls.models import PriceLog
    
[/code]


CC BY-SA 3.0
2018-03-08T14:37:34.557
42240
2018-03-08T14:37:34.557
2168
41449
answer


確かにそのような設定方法は問題になりますね。  
PyCharmでDjangoをやっていますが、  
以下の方法でできたり、できなかったり、  
不安定で、原因不明です。  
PyCharmの環境変数を「DJANGO_SETTINGS_MODULE=mysite.settings」で設定しています。

Djangoのプロジェクトは1個のみの場合問題にならず、気づきませんでしたが、  
プロジェクトを1個追加してから問題が発生しています。  
純粋Pythonではいけるようですので、PyCharmの設定問題かもしれませんね。

[code]

    import sys, django
    sys.path.extend('../polls')
    django.setup()
    
    from polls.models import PriceLog
    
[/code]


CC BY-SA 4.0
2019-11-07T04:16:51.410
60310
2019-11-07T04:16:51.410
36518
41449
answer