Django升级,导入错误和冲突的包名称

时间:2014-07-07 22:22:46

标签: python django import

我有一个较旧的django项目(在1.3很热的时候创建),我试图转换为最新的Django 1.6。

新目录结构已转换为新方式,项目名称已从所有导入中删除(from myproject.api import x变为from api import x

myproject/
    myproject/
        __init__.py
        settings.py
        urls.py
    api/
        __init__.py
        resthandler.py
    platforms/
        __init__.py
        plat1/
            __init__.py
            handlers.py
            api/
                __init__.py

问题是平台/ plat1 /处理程序试图从/api/resthandler.py导入

来自api.resthandler import RestHandler

但由于已经有一个较低级别的api,因为没有依赖于它的2个级别而且/ api中有2个级别,因此它会因为ImportError而失败。 我尝试将项目级别退回到进口,尝试相对进口,没有任何帮助。我似乎无法从平台/ plat1 /中导入/ api。我要去改变整个结构,但我想知道在走这条路之前我是否遗漏了什么。

3 个答案:

答案 0 :(得分:0)

这是python的行为而不是django。 U可能会更改文件夹的名称。其余的将是解决方法,可能会遇到更多麻烦。

答案 1 :(得分:0)

当你说

  

问题是平台/ plat1 /处理程序试图从/api/resthandler.py导入

     

来自api.resthandler import RestHandler

是否要导入根级别“api”或当前文件夹一个? 如果你想要当前文件夹1,这有用吗?:

from .api import resthandler.RestHandler as Plat1RestHandler

答案 2 :(得分:0)

为了将来参考,解决方法是从 future 导入absolute_imports。

from __future__ import absolute_imports

这样所有导入都是root的绝对导入,除非使用点表示法明确指定了相对导入。