Django 导入错误:没有这个模块
我今天一直在网上查这个问题,但没找到解决办法,希望你们能帮帮我:
我在用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
希望这能帮到你