ImportError:没有名为 lop.models 的模块

Posted

技术标签:

【中文标题】ImportError:没有名为 lop.models 的模块【英文标题】:ImportError: No module named lop.models 【发布时间】:2015-03-14 02:02:21 【问题描述】:

我知道有很多与此相关的问题,但这些答案似乎不适用于我的情况。我是 Django 新手(我已经完成了教程),但我正在修复我无法联系到的其他人的代码。

我正在使用 python 2.7 在 Debian 上运行 django 1.5。 我收到了这个错误。

File "views-full.py", line 1, in <module>
    from lop.models import File, V1, V2
ImportError: No module named lop.models.

views-full.py:

from lop.models import File, V1, V2
...

我的树是这样的(为了节省时间,我的 views-full.py 在 lop 下):

Main
├── Main
│   ├── __init__.py
│   ├── __init__.pyc
│   ├── settings.py
│   ├── settings.pyc
│   ├── urls.py
│   ├── urls.pyc
│   ├── wsgi.py
│   └── wsgi.pyc
├── manage.py
├── lop
│   ├── admin.py
│   ├── admin.pyc
│   ├── forms.py
│   ├── forms.pyc
│   ├── __init__.py
│   ├── __init__.pyc
│   ├── migrations
│   │   ├── 0001_migrate.py
│   │   ├── 0001_migrate.pyc
│   │   ├── 0002_migrate.py
│   │   ├── 0002_migrate.pyc
│   │   ├── 0003_auto__add_category.py
│   │   ├── 0003_auto__add_category.pyc
│   │   ├── 0004_auto__add_field_script_category.py
│   │   ├── 0004_auto__add_field_script_category.pyc
│   │   ├── __init__.py
│   │   └── __init__.pyc
│   ├── models.py
│   ├── models.pyc
│   ├── tests.py
│   ├── urls.py
│   ├── urls.pyc
│   ├── views
│   │   ├── __init__.py
│   │   ├── __init__.pyc
│   │   ├── viewsb.py
│   │   ├── viewsb.pyc
│   │   └── viewsb.py.save
│   ├── views-full.py
│   ├── views.pyc
│   ├── views.py.save
│   └── views-test.py
├── scripts [39 entries exceeds filelimit, not opening dir]
├── sqlite3.db
├── static [29 entries exceeds filelimit, not opening dir]
├── templates
│   ├── entry2-full.html
│   ├── entry2.html
│   ├── entry3-full.html
│   ├── entry3.html
│   ├── entry.html
│   ├── index.html
│   ├── index.html.old
│   ├── scriptlist.html
│   └── testData.html
└── user-dirs [109 entries exceeds filelimit, not opening dir] 

如您所见,我的 __init__.pymodels.py 都在同一个文件夹中(我知道在其他情况下它们不存在是问题)。

settings.py:

 ...     
 INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.admin',
    # 'django.contrib.admindocs',
    'lop',
    'south',
)
...

我觉得我犯了一些菜鸟的错误,但我想不通。

【问题讨论】:

【参考方案1】:

所以我发现问题出在我的错误上。

长期以来,我认为要测试任何编译错误(语法),我会在 shell 上运行“python migrate”或“python makemigrations”。我的信念是,所有更改都需要迁移,而不仅仅是数据库中的更改。当语法错误包括这个错误时,我会收到错误消息,并且它以前在其他情况下也有效。有人最终向我指出,这不是你测试它的方式,运行“python manage.py runserver 0.0.0.0:8000”会指出本地机器代码中的任何错误。之后我没有收到我的特定文件的错误消息。

Gabriel L'Heureux,我仍然感谢你的帮助(我会为此给你一分,但我没有足够的分数)所以我很感谢你。

【讨论】:

【参考方案2】:

我不熟悉 django,但这是我在这种情况下所做的:

import sys
sys.path.append('/path/of/folder/where/module/is/')
from new_module import new_function

【讨论】:

唯一的问题是该模块的路径可能不是永久的(如果有人后来被雇用,目录将移动到新用户的位置并且路径将不再有效)。在我的项目中,我定义了一个常量 (BASE_DIR) 来指定目录的路径,因此如果发生这种情况,他们只需更改常量即可将更改应用到任何地方。但是,我不认为我可以用终端做同样的事情。 并且该常量不能用于定义模块的路径? (sys.path.append(BASE_DIR + '/specific/module/folder/') 我不得不承认我不知道还能做什么,因为除了已经给出的答案之外,我还没有发生过这种情况!

以上是关于ImportError:没有名为 lop.models 的模块的主要内容,如果未能解决你的问题,请参考以下文章

ImportError:没有名为枚举的模块

ImportError:没有名为“appdirs”的模块

ImportError:没有名为 websocket 的模块

ImportError:没有名为“backports”的模块

ImportError:没有名为 ghostscript 的模块

ImportError:运行火花时没有名为请求的模块