从__init__.py导入方法

时间:2016-10-30 09:48:37

标签: python python-module

在python中导入模块时遇到一些问题。这是我的文件夹结构

my_app/
    app.py
    __init__.py (I want to import a function from this file)
    folder1/
        __init.py
        method1.py
    folder2/
        __init__.py
        method.py

在我的根__init__.py我有这个功能

def want_to_be_run_elsewhere():
    pass

在我的app.py中,我想导入此功能并在我启动应用程序时运行它,但我不确定该怎么做。

from my_app import want_to_be_run_elsewhere

这将抛出一个名为my_app

的无模块

据我所知,我拥有所有必需的__init__.py文件,所以也许它可能与sys.path相关?

我已经在这里阅读了一些类似的主题,但我还没能解决这个问题。

1 个答案:

答案 0 :(得分:2)

通常你会像

那样进行导入
from . import want_to_be_run_elsewhere

这不起作用,因为您正在呼叫app.py。如果导入my_app.app,则它是模块的一部分。如果你打电话就不是。从使用.的模块导入将无效。

您可以将app.py移到my_app之外,将其从模块中删除,然后再次使用导入功能。

或者您可以使用

from __init__ import want_to_be_run_elsewhere
app.py

中的

我相信

from my_app import want_to_be_run_elsewhere

仅在您实际拥有pip install -e my_app/时才有效。那它也应该有效。