it-swarm.dev

ImportError: لا يمكن استيراد الاسم

لدي ملفان app.py و mod_login.py

app.py

from flask import Flask
from mod_login import mod_login

app = Flask(__name__)
app.config.update(
    USERNAME='admin',
    PASSWORD='default'
)

mod_login.py

# coding: utf8

from flask import Blueprint, render_template, redirect, session, url_for, request
from functools import wraps
from app import app

mod_login = Blueprint('mod_login', __name__, template_folder='templates')

وثعبان إرجاع هذا الخطأ:

Traceback (most recent call last):
  File "app.py", line 2, in <module>
    from mod_login import mod_login
  File "mod_login.py", line 5, in <module>
    from app import app
  File "app.py", line 2, in <module>
    from mod_login import mod_login
ImportError: cannot import name mod_login

إذا قمت بحذف from app import app ، فستكون الشفرة صالحة ، لكن كيف يمكنني الوصول إلى app.config؟

20
Patrick Burns

المشكلة هي أن لديك استيراد دائري: في app.py

from mod_login import mod_login

في mod_login.py

from app import app

هذا غير مسموح به في بيثون. راجع اعتماد الاستيراد الدائري في Python لمزيد من المعلومات. باختصار ، الحل هو

  • إما جمع كل شيء في ملف واحد كبير
  • تأخير أحد الاستيراد باستخدام الاستيراد المحلي
36
hivert

يمكن أن يحدث هذا أيضًا إذا كنت تعمل على البرامج النصية والوظائف وقمت بنقلها (أي تغيير موقع التعريف) والذي كان من المحتمل أن يكون قد أنشأ مرجعًا عن طريق الخطأ.

قد تجد أنه تم حل الموقف إذا قمت بإعادة تعيين iPython kernal لمسح أي مهام قديمة:

%reset

أو القائمة> إعادة تشغيل المحطة

13
mjp

بدلاً من استخدام الواردات المحلية ، يمكنك استيراد الوحدة النمطية بالكامل بدلاً من الكائن المحدد. ثم ، في الوحدة النمطية app ، اتصل بـ mod_login.mod_login

app.py

from flask import Flask
import mod_login

# ...

do_stuff_with(mod_login.mod_login)

mod_login.py

from app import app

mod_login = something
2
Jivan

عندما يكون هذا في وحدة التحكم بيثون إذا قمت بتحديث وحدة نمطية لتكون قادرة على استخدامها من خلال وحدة التحكم لا يساعد إعادة تعيين ، يجب عليك استخدام

import importlib

و

importlib.reload (*module*)

من المرجح أن تحل مشكلتك

1
Talles .Carvalho

على غرار إجابة mjp @ ، تم حل مشكلتي بعد حذف جميع ملفات .pyc.

0
Zachary Ryan Smith