1

我在默认位置的 models.py 模块中有两个模型类。

PythonFinal
    |_   manage.py
    |_  template
    |_ PythonFinal
    |       |_  __init__.py
    |       |_  settings.py
    |       |_  urls.py
    |       |_  swgi.py
    | 
    |      
    |___ fertility
            |_  __init__.py
            |_  models.py
            |_  tests.py
            |_  views.py
            |_  dateUtils.py

我只是想将类导入 dateUtils.py

from fertility.models import Cycle, Period

if __name__ == '__main__':
    p1 = Period(periodFirstDay='2012-7-26' , periodNumber=4) 

如果我运行这个模块,我会得到

ImportError: no module named fertility

如果我尝试从 python 命令行导入模型,我会得到

import models    
Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "models.py", line 1, in <module>
        from django.db import models
      File "/usr/local/lib/python2.6/dist-packages/django/db/__init__.py", line 11, in <module>
        if DEFAULT_DB_ALIAS not in settings.DATABASES:
      File "/usr/local/lib/python2.6/dist-packages/django/utils/functional.py", line 184, in inner
        self._setup()
      File "/usr/local/lib/python2.6/dist-packages/django/conf/__init__.py", line 40, in _setup
        raise ImportError("Settings cannot be imported, because environment variable %s is undefined." % ENVIRONMENT_VARIABLE)
    ImportError: Settings cannot be imported, because environment variable DJANGO_SETTINGS_MODULE is undefined.

我将我的项目根文件夹添加到 ~/.bashrc 中的 PYTHONPATH 中。我的 wsgi.py 读取

import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "PythonFinal.settings")

我不认为这不是循环导入,因为我得到的是 ImportError 而不是 NamingError,而且我还没有很多导入。出于显而易见的原因,我需要能够将我的模型导入其他模块,我可以进行单元测试,或者我需要另一个简单的工作流程来完成相同的工作。

4

1 回答 1

2

如果PythonFinal在 中/home/users/jeremy/django/PythonFinal,那么/home/users/jeremy/django应该在您的PYTHONPATH环境变量中,并且DJANGO_SETTINGS_MODULE应该设置为"PythonFinal.PythonFinal.settings". 然后你可以使用

from PythonFinal.fertility.models import Cycle, Period

从 Python 命令行。

然而,更常见的是将settings.py文件放在与 相同的文件夹中manage.py,并且许多工具和教程都期望这种设置......

于 2012-07-28T22:03:54.807 回答