在提出这个问题之前,我已经在stackoverflow中查看了类似的问题,但没有一个能帮我解决问题。
我有一个名为Django
的{{1}}项目。
testrun
我在-rw-r--r-- 1 pribeiro Users 196608 Dec 5 21:38 db.sqlite3
drwxr-xr-x 20 pribeiro Users 680 Dec 19 16:14 graphs
-rw-r--r-- 1 pribeiro Users 250 Dec 4 20:11 manage.py
drwxr-xr-x 8 pribeiro Users 272 Dec 12 21:57 parser
drwxr-xr-x 10 pribeiro Users 340 Dec 23 09:56 testrun
内有一个名为graphs
的应用(testrun
已作为graphs
添加到testrun/settings.py
):
INSTALLED_APPS
我尝试运行-rw-r--r-- 1 pribeiro Users 0 Dec 4 23:05 __init__.py
-rw-r--r-- 1 pribeiro Users 739 Dec 5 21:45 admin.py
drwxr-xr-x 7 pribeiro Users 238 Dec 19 09:07 migrations
-rw-r--r-- 1 pribeiro Users 3945 Dec 19 09:07 models.py
-rw-r--r-- 1 pribeiro Users 5057 Dec 19 16:14 parser.py
drwxr-xr-x 2 pribeiro Users 68 Dec 12 18:33 static
drwxr-xr-x 3 pribeiro Users 102 Dec 5 22:31 staticfiles
drwxr-xr-x 3 pribeiro Users 102 Dec 5 22:32 templates
-rw-r--r-- 1 pribeiro Users 343 Dec 19 15:22 test_parser.py
-rw-r--r-- 1 pribeiro Users 60 Dec 4 23:05 tests.py
-rw-r--r-- 1 pribeiro Users 149 Dec 12 18:22 urls.py
-rw-r--r-- 1 pribeiro Users 287 Dec 12 18:29 views.py
然后:
python manage.py shell
因此,在>>> from testrun.graphs.models import *
Traceback (most recent call last):
File "<console>", line 1, in <module>
ImportError: No module named graphs.models
中,我尝试导入graphs\parser.py
中的分类,因为当我解析代表models.py
中的类的.json
文件时,我将需要它们:
models.py
和from graphs.models import *
class Parser:
def __init__(self, filename=''):
self.api_test = APITest()
是APITest
中的一个类:
models.py
当我执行import datetime
from django.db import models
class APITest(models.Model):
#... def goes here
时,我得到:
graphs\parser.py
有人可以解释为什么它不起作用?
答案 0 :(得分:1)
尝试
python manage.py shell
from graphs.models import *
并添加 来自.models导入APITest
到parser.py并运行 python manage.py shell
from graphs.parser import Parser
为了管理Django中的依赖项,最好使用python virtualenv。
如果您只想从命令行从Django运行某些逻辑,请尝试使用编写自定义django-admin命令。 https://docs.djangoproject.com/en/dev/howto/custom-management-commands/
在您的情况下,如果您想要一个脚本my_parser.py,您可以将它放在graphs / management / commands /文件夹中,然后您可以将其作为python管理my_parser来运行。
my_parser的代码看起来像这样
from django.core.management.base import BaseCommand, CommandError
from .models import APITest
class Command(BaseCommand):
args = '<arg1 arg2...>'
help = 'Help line ...'
def handle(self, *args, **options):
... # You code comes here
答案 1 :(得分:0)
第一个不起作用,因为你这样做:
from testrun.graphs.models import *
但它应该是:
from graphs.models import *
因为你的pythonpath已经指向testrun
项目目录。第一个导入将在testrun/testrun/
目录中查找,我猜这不是你想要的。
第二个不起作用,因为我假设您从graphs
目录执行该文件。如果从那里执行文件,则导入将不起作用,因为导入假定python路径指向testrun
项目根目录。