我有一个目录结构,这是一个简化的例子:
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中都会发生。
我怎样才能让它发挥作用?它似乎只能在我安装我的软件包时完成,而不能在项目目录中完成。
答案 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?