导入我自己的包时无法访问模块

时间:2017-03-06 17:07:17

标签: python

我有一个目录结构,这是一个简化的例子:

project_root/
    __init__.py
    test.py
    mypack/
        __init__.py
        mymodule.py

test.py包含以下内容:

from . import mypack

mypack.mymodule.some_function()

和mypack的__init__.py包含:

from . import *
__all__ = ['mypack']

这样做时,Python告诉我'mypack'没有'mymodule' 我只能做from mypack import mymodule 这在Python 2.7和Python 3.5中都会发生。

我怎样才能让它发挥作用?它似乎只能在我安装我的软件包时完成,而不能在项目目录中完成。

2 个答案:

答案 0 :(得分:1)

对于您想要使用的选项,您必须实际导入mypack.__init__.py文件中的函数:

#In mypack/__init__.py
import mymodule

虽然它可以起作用,但它并不是最狡猾的方式,我建议(我仍然相信它可以更好):

# In your test.py file
import mypack.mymodule

mypack.mymodule.some_function() # Should work now

通过这种方式,您可以了解文件的来源,并且无需修改__init__.py文件以使其正常工作

答案 1 :(得分:0)

如果您希望从程序包导入中访问您的模块,则需要将其包含在__all__中:

# from . import *  This is prolly not needed when using __all__
__all__ = ['mymodule']

您似乎误解了__all__的工作原理。您可能希望看到Can someone explain __all__ in Python?