如果__name__ ==“ __main__”,则使用python ImportError

时间:2018-11-16 09:27:24

标签: django python-2.7

我目前继承了一个看起来像这样的代码库。

project
manage.py
   |_ config
           |_ settings
           |_ wsgi.py
   |_ project
            |_ app1
            |_ app2
            |.... <-- many more Django apps
            |_ a_new_app
                 |_ __init__.py                  
                 |_ run.py
                 |_ foo.py
                 |_ bar.py

我添加了一个新的应用程序,其中包含一些.py文件,这些文件也从其他应用程序导入到相同的程序包中,也从项目中的其他应用程序包导入。一切都好,直到我尝试跑步

python project/a_new_app/run.py

然后我开始出现导入错误,这里是run.py的外观。

# run.py
from project.a_new_app.foo import Foo

class App():
    def method(self, key):
        data = {"some-key": Foo}
        return data.get(key)

    .... more methods here

if __name__ == "__main__":

    app = App()
    app.loop_forever()

我收到此错误

File "project/a_new_app/run.py", line 7, in <module>
    from project.a_new_app.foo import Foo
ImportError: No module named project.a_new_app.foo

我的工作目录是/user/me/PycharmProjects/project,谢谢。

1 个答案:

答案 0 :(得分:1)

from project.a_new_app.foo import Foo

要使此导入正常进行,您需要将外部project目录(包含manage.py和内部project的目录)放置在Python路径上。

但是,run.pyproject/a_new_app还要深两个目录。因此,您需要在模块顶部的python路径中添加../..

import sys
sys.path.append('../..')

from project.a_new_app.foo import Foo
...