Ale*_*lec 5 python packages python-module python-import
我有以下包结构
package
__init__.py
sub1
__init__.py
foo.py # Contains class Foo
sub2
__init__.py
bar.py # Contains class Bar
Run Code Online (Sandbox Code Playgroud)
我希望能够公正import package和有package.Foo和package.Bar,即我想有子包是对用户透明.
问题是导入sub2需要很长时间,许多用户根本不关心sub2中的东西,只想要sub1中的东西.因此,我希望用户能说import package.sub1或from package import sub1到刚刚导入SUB1和SUB2跳跃的进口.
我知道我可以通过package/__init__.py控制来实现第一部分
from .sub1 import *
from .sub2 import *
Run Code Online (Sandbox Code Playgroud)
和具有package/sub1/__init__.py可from .foo import Foo与类似地对于SUB2.但是,即使用户仅尝试导入,也会始终导入sub1和sub2 package.sub1.
相应地,我可以通过package/__init__.py使用与sub1/__init__.py上面相同的空来实现第二部分.但是,然后只是说不import package加载sub1或sub2,所以用户必须显式加载它们然后引用package.sub1.Foo.
理想情况下,解决方案在2.7.10和3.5.0中均可使用,但如果两者都不可能,我将接受其中一个或另一个.
您可以将快捷方式添加到__init__.py模块的:
包/__init__.py
__all__ = [
... add everything you want to be listed for this module
'Foo',
'Bar',
...
]
from package.sub1.foo import Foo
from package.sub2.bar import Bar
Run Code Online (Sandbox Code Playgroud)
现在你应该可以调用:
from package import Bar
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
263 次 |
| 最近记录: |