Django 导入错误:没有这个模块

1 投票
2 回答
1137 浏览
提问于 2025-04-18 03:40

我今天一直在网上查这个问题,但没找到解决办法,希望你们能帮帮我:

我在用Django 1.6做一个叫“builds”的应用,这是我一个叫“computerbuilder”的项目的一部分。

在测试服务器上,网站运行得很好。不过,我创建了一个文件来往数据库里填充一些数据,但当我运行 python fillDB.py 时,它给我报错:

Traceback (most recent call last):
    File "fillDB.py", line 1, in <module>
        from builds.models import BuildsTable
ImportError: No module named builds.models

这是我的 fillDB.py 文件:

from builds.models import BuildsTable

moboDB = open("db.txt", "r")
lines = moboDB.read().split('\",')
print lines

def main():
    global lines
    global BuildsTable

for item in lines:
    mobo = BuildsTable.objects.get(moboListing="%s" % item[0])
    price_local = BuildsTable.objects.get(moboListing="%s" % item[1])
    if(BuildsTable.objects.filter(
        moboListing = mobo, price = price_local).exists() == False):
            mydb = BuildsTable(moboListing = mobo, price = price_local)
            mydb.save()

main()

这是我在“builds”应用里的 models.py 文件:

from django.db import models
# Create your models here.

class BuildsTable(models.Model):
    id = models.AutoField(primary_key=True)
    moboListing = models.CharField(max_length=200)
    price = models.IntegerField()

我的目录结构是这样的:

├── builds
│   ├── admin.py
│   ├── __init__.py
│   ├── models.py
│   ├── tests.py
│   └── views.py
├── computerbuilder
│   ├── dev
│   │   ├── db.txt
│   │   ├── fillDB.py
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   ├── views.py
│   ├── wsgi.py
├── manage.py
└── requirements.txt

因为我在使用一个不属于Django的外部文件,我觉得这可能是它无法识别的原因。另外,我还在用postgres数据库,希望这能帮到你。

2 个回答

1

检查一下你的 sys.path,看看里面有没有你的路径。每次你运行 Python 项目时,Python 会把你当前的路径加到 sys.path 里。而一旦你退出 Python 环境,Python 就会把你加的路径移除。

你的问题是你只运行了 fillDB.py,Python 只把 '../computerbuilder/dev' 加到了 sys.path 里,所以它找不到 builds 模块。

解决办法是把你的 fillDB.py 文件移动到与 builds 文件夹同一级别的位置。

├── builds    
├── fillDB.py
│   ├── admin.py
│   ├── __init__.py
│   ├── models.py
│   ├── tests.py
│   └── views.py
├── computerbuilder
│   ├── dev
│   │   ├── db.txt
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   ├── views.py
│   ├── wsgi.py
├── manage.py
└── requirements.txt

希望这能帮到你 :D

1

你需要在开发文件夹里添加一个init.py文件。这样这个文件夹就会被当作一个Python包来处理。接下来,你需要在fillDB.py文件中添加你的Django项目路径,像这样:

Root
 ├──├── builds
    │   ├── admin.py
    │   ├── __init__.py
    │   ├── models.py
    │   ├── tests.py
    │   └── views.py
    ├── computerbuilder
    │   ├── dev
    │   │   ├── db.txt
    │   │   ├── fillDB.py
    │   ├── __init__.py
    │   ├── settings.py
    │   ├── urls.py
    │   ├── views.py
    │   ├── wsgi.py
    ├── manage.py
    └── requirements.txt

请按照上面的文件夹结构来做,

同时你还需要把Django的环境变量设置到这个文件里。

fillDB.py

import sys
import os


if __name__ == "__main__":
    sys.path.append('/path/Root')
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "computerbuilder.settings")

    from builds.models import BuildsTable

    mobo = BuildsTable.objects.all()
    print mobo

希望这能帮到你

撰写回答