红色的火光照耀着狮子的脑袋: 笑翻了的中国菜名翻译 西部风情 - 甘肃TSI 2008
Jul 24

在GAE中遇到一个很怪的模块导入问题,问题的本质,就像Java的classpath设置一样,是python中导入模块时搜索路径的问题。比如站点目录结果如下:

mysite
├─__init__.py
├─models.py
├─templates [dir]
├─static [dir]
└─check [dir]
      ├─__init__.py
      ├─views.py
      └─models.py

在check目录的views.py中,我想引用根目录中的models.py中的函数,查看网页时,直接报错,找不到导入对

然后觉得很奇怪,就使用相对引用语法,应该能通过编辑器语法检查,但是在AppEngine无法运行。思前想后,应该是sys.path中,代码目录不在模块搜索路径中。搞之,修改django的启动文件,加入:

from os.path import dirname
import sys
sys.path.append(dirname(dirname(__file__)))

然后将sys.path的内容输出到浏览器,发现一个奇怪的现象:第一次访问时,上面加入的搜索路径是存在的;刷新浏览器后,新加的搜索路径莫明其妙的消失了!

万幸的是,根目录还是在搜索路径中的。所以只能灵活灵活地干活了:即将根目录的models.py,放到一个子目录中,然后使用from common.models import YourModuleObjectName,OK!

mysite
├─__init__.py
├─templates [dir]
├─static [dir]
├─common [dir]
│     ├─__init__.py
│     └─models.py
└─check [dir]
      ├─__init__.py
      ├─views.py
      └─models.py

随机日志

Leave a Reply