質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.12%
LINE Messaging API

LINE Messaging APIは、メッセージの送信・返信ができるAPIです。Web APIを経由しアプリケーションサーバとLINEのAPIでやり取りが可能。複数のメッセージタイプや分かりやすいAPIリファレンスを持ち、グループチャットにも対応しています。

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

解決済

Djangoの循環インポートエラーの回避について

TAK0811
TAK0811

総合スコア2

LINE Messaging API

LINE Messaging APIは、メッセージの送信・返信ができるAPIです。Web APIを経由しアプリケーションサーバとLINEのAPIでやり取りが可能。複数のメッセージタイプや分かりやすいAPIリファレンスを持ち、グループチャットにも対応しています。

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

1回答

0リアクション

0クリップ

269閲覧

投稿2022/10/02 09:56

編集2022/10/03 07:25

前提

Django・LINE messagingAPI(SDK)によるチャットボット開発
Django:3.2.8
Pyrhon:3.9.13

実現したいこと

views.pyにて記載のdef sendMessage()を別途、作成したutilsディレクトリ内create_screen.py に移したいが、cannot import のエラーが発生する。

エラーコードを解消するために、どのように書き換えれば良いかご教示頂けますと幸いです。

発生している問題・エラーメッセージ

ImportError: cannot import name 'line_bot_api' from partially initialized module 'bot.views' (most likely due to a circular import)(/Users/TAK/Desktop/sdk/djangobot/bot/views.py)

該当のソースコード

<views.py> import os from django.http import HttpResponseForbidden, HttpResponse from django.views.decorators.csrf import csrf_exempt from linebot import LineBotApi, WebhookHandler from linebot.exceptions import InvalidSignatureError from linebot.models import MessageEvent, TextMessage from dotenv import load_dotenv from utils.create_screen import carouselTemplate load_dotenv() line_bot_api = LineBotApi(os.environ["CHANNEL_ACCESS_TOKEN"]) handler = WebhookHandler(os.environ["CHANNEL_SECRET"]) @csrf_exempt def callback(request): signature = request.META['HTTP_X_LINE_SIGNATURE'] body = request.body.decode('utf-8') try: handler.handle(body, signature) except InvalidSignatureError: HttpResponseForbidden() return HttpResponse('OK', status=200) @handler.add(MessageEvent, message=TextMessage) def handle_image_message(event): line_bot_api.reply_message( event.reply_token, messages = carouselTemplate() ) #以下の関数をこちらの配置で実行するとエラーは発生しないが、create_screen.pyに移動させるとエラーが発生します。 def sendMessage(): line_bot_api.broadcast(TextSendMessage(text='Hello World!')) sendMessage()
<create_screen.py> from linebot.models import TextSendMessage from bot.views import line_bot_api #上記view.pyに記述していたsendMessage()関数をここに移行しエラーなく実行させたいがImportErrorが発生。 def sendMessage(): line_bot_api.broadcast(TextSendMessage(text='Hello World!')) sendMessage()

試したこと

エラーメッセージの most likely due to a circular import から以下を試しましたが変わりませんでした。
from utils.create_screen import carouselTemplate → * 
(反対にcreate_screen.py の import line_bot_api → * )
参考元:https://www.kthksgy.com/python/python-circular-dependency/
※【解決策1】は勉強不足により、本課題に置き換えられず現状試せておりません。

何卒よろしくお願い致します。

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

quickquip

2022/10/03 02:40

質問が書かれていなくて、回答しづらいと感じました。
TAK0811

2022/10/03 07:27

ご指摘頂き誠にありがとうございます。 稚拙な説明で大変失礼致しました。文章修正致しましたので、改めてご確認頂けますと幸いです。 お手数をお掛け致しますが、よろしくお願い致します。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

LINE Messaging API

LINE Messaging APIは、メッセージの送信・返信ができるAPIです。Web APIを経由しアプリケーションサーバとLINEのAPIでやり取りが可能。複数のメッセージタイプや分かりやすいAPIリファレンスを持ち、グループチャットにも対応しています。

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。