Django / Python奇怪没有名为'module_name'的模块

时间:2012-05-06 06:27:24

标签: python django django-models import

我创建了一个简单的模块来存储我的所有选择并在我的应用程序中重用它们(请参阅CharField选项)

这是我的项目结构

project_name/  
  -- manage.py  
  -- settings.py
  -- ......
  -- apps/  
      -- __init__.py
      -- simple_app/
           -- __init__.py
           -- models.py
           -- ....
  -- common/
      -- __init__.py  
      -- choices/
           -- __init__.py  

在我的common.choices.__init__.py里面我有

from django.utils.translation import ugettext as _

SCALE_TYPE_CHOICES = (
    (1,_('Lineare')),
    (2,_('Logaritmica')),
    (3,_('Esponenziale'))
)

GENDER_CHOICES = (
    ('male',_('Maschio')),
    ('female',_('Femmina')),
    ('any',_('Tutti')),
)

并在apps.simple.models.py

from common.choices import SCALE_TYPE_CHOICES, GENDER_CHOICES
.....

我的passenger_wsgi.py

import sys, os

sys.path.insert(0, os.getcwd())
sys.path.insert(0, os.path.join(os.getcwd(),"path_to_my_project"))
sys.path.insert(0, os.path.join(os.getcwd(),"path_to_my_project/common"))

os.environ['DJANGO_SETTINGS_MODULE'] = "project_name.settings"
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

在我的开发服务器中,它工作正常,但在我的生产服务器中,它会抛出错误“没有模块命名选择”

manage.py shell

 import common
 print common
 <module 'common' from 'absolute_project_path/common/__init__.pyc'>

passenger_wsgi.py

import sys, os
sys.path.insert(0, os.getcwd())
sys.path.insert(0, os.path.join(os.getcwd(),"path_to_my_project"))
sys.path.insert(0, os.path.join(os.getcwd(),"path_to_my_project/common"))

os.environ['DJANGO_SETTINGS_MODULE'] = "project_name.settings"
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
 import common
 print common

 Outputs
 <module 'common' from 'absolute_project_path/common/__init__.pyc'>

任何想法?
谢谢!

3 个答案:

答案 0 :(得分:0)

将项目所在的目录添加到sys.path

答案 1 :(得分:0)

检查以确保sys.path中没有其他包/模块common

import common
print common # or common.__file__

您是append项目路径sys.path而不是insert(0, path),因此sys.path w / o选项中的可导入common将失败。您可以使用insert查看错误是否消失。

答案 2 :(得分:0)

从wsgi.py中删除common并将其添加到settings.py而不是

import os
filedir = os.path.dirname(__file__)
sys.path.append(os.path.join(filedir))
sys.path.append(os.path.join(filedir, 'common'))