ImportError:无法导入名称 a_class

Posted

技术标签:

【中文标题】ImportError:无法导入名称 a_class【英文标题】:ImportError: cannot import name a_class 【发布时间】:2015-04-09 00:32:56 【问题描述】:

我有一个 django 站点,托管在 pythonanywhere.com 上。在那个站点上,我可以创建一个 Bash 控制台或一个 iPython 控制台。

我希望能够做到这一点:

from my_module import a_class a_class.object.all() a_class.object.filter(some_attribute=True)

如果我尝试在 iPython 控制台中运行它,我会收到错误:ImportError: cannot import name a_class

解释可能很简单,我还在学习中……我找到的答案是关于第三方模块的,但这是我创建的,我不知道为什么它不能导入。如果我不执行from...import,我会得到a_class 未定义的错误,正如预期的那样。

编辑

这是我的 settings.py 文件:

# Application definition

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'accueil',
    'a_class',
)

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
)

ROOT_URLCONF = 'my_site.urls'

WSGI_APPLICATION = 'my_site.wsgi.application'


# Static files (CSS, javascript, Images)
# https://docs.djangoproject.com/en/1.7/howto/static-files/

STATIC_URL = '/static/'
STATIC_ROOT = '/static/'

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, "static"),
    '/var/www/static/',
)

TEMPLATE_DIRS = (
    os.path.join(BASE_DIR, 'templates'),
)

我的目录结构是: ── a_class │ ├── __init__.py │ ├── admin.py │ ├── forms.py │ ├── migrations │ │ ├── 0001_initial.py │ │ ├── 0016_auto_20150407_0057.py │ │ ├── __init__.py │ ├── models.py │ ├── templates │ │ └── a_class │ │ ├── home.html │ ├── tests.py │ ├── urls.py │ └── views.py ├── manage.py ├── my_site │ ├── __init__.py │ ├── settings.py │ ├── urls.py │ └── wsgi.py

【问题讨论】:

既然你提到了答案可能很简单:你的模块文件夹中有manditory __init__.py 文件吗?导入是否在非交互式 shell 中工作(如果是:你使用线程模块吗?)?该模块是否在 iPython 可以找到的某个地方(在应用程序文件夹/PYTHONPATH 中的某个地方)? 是的,init.py 在那里。我可以从网站的其他地方导入这些类,这能回答第二个问题吗? iPython 从项目的根文件夹中启动。 相对于您在此处显示的文件结构,my_module 在哪里? 我应该在我的帖子中提到我想要运行的命令,它们在 PyCharm 中运行良好。 GilesTomas 对以下答案的评论帮助我获得了所需的控制台。感谢您的帮助! 【参考方案1】:

类通常在模型中,有几种方法可以导入它们,首先:

from django.apps import apps

MyModel = apps.get_model('app_label', 'ModelName')  # Both strings 

如果它存储在 models.py 中,你也应该这样做

from myapp.models import Class  # Make sure the app has an __init__.py to be seen 

还要使用 ./manage shell,您需要安装并迁移应用程序。

【讨论】:

感谢您的回答。老实说,当您说需要安装和迁移应用程序时,我并不是您的意思。您的第一个解决方案给了我这个错误:AppRegistryNotReady: Models aren't loaded yet.,而第二个解决方案给了我一个ImproperlyConfigured: Requested setting CACHES, but settings are not configured. 错误。 (是的,我的模型存储在 models.py 中)。希望它能澄清问题! 在 INSTALLED_APPS 下的 settings.py 中添加您的应用名称作为字符串。然后在 shell 中运行 ./manage.py makemigrations && ./manage.py migrate,如果你刚刚开始,请按照 Django polls 教程进行操作。 docs.djangoproject.com/en/1.8/intro/tutorial01 应用程序在 INSTALLED_APPS 中列出,之后我运行了这两个命令。 请发布您的 settings.py 和您的目录结构 只是为了确保您了解 Mikeec3 提到的特定内容——如果您想访问 Django 模型,您需要使用 ./manage.py shell 来启动 IPython。从 PythonAnywhere“控制台”页面启动的常规 IPython 控制台将不起作用,从 Bash 控制台运行“ipython”也不会。你需要启动一个 Bash 控制台,cd 到你的 Django 项目的根目录,然后运行 ​​./manage.py shell。抱歉,如果您已经很清楚了,我只是认为它需要下划线。

以上是关于ImportError:无法导入名称 a_class的主要内容,如果未能解决你的问题,请参考以下文章

ImportError:无法导入名称“WebClient”

ImportError:无法导入名称“AFAVSignature”

ImportError:无法导入名称“评估”(来自意外导入评估)

Django 'ImportError: 无法导入名称 url'

ImportError:导入 PCA 时无法导入名称“LatentDirichletAllocation”[关闭]

如何修复“ImportError:无法导入名称'StringIO'”