我正在重组一个python项目,它是从一些更大的脚本中演化而来的。我以前没有想过一个合适的包结构,所以所有的脚本都位于包根dir中。
我试图给这个项目一个适当的“包”结构,如下所示:
packagename/
docs/
packagename/
__init__.py
module_data.py
module_corrections.py
module_plot.py
subpackage1/
subpackage2/
README.md我希望支持将该一揽子方案导入如下:
from packagename import *上一次导入的效果应该是加载几个子模块或子包,但也要加载一些类和函数,我想在没有预置模块名称的情况下提供这些类和函数。
在__all__中使用__init__.py,我只能加载子模块或子包。
如何加载,例如从module_data加载一个module_data类和从模块module_plot加载一个函数dplot
此外,如何使用另一个短名称(例如,module_data )导入mda?
编辑
简短回答
我要提供的所有名称都必须在__init__.py、和中导入或定义,并将其作为字符串添加到列表__all__中。
感谢@FMc提供了一个例子和洞察力。
发布于 2014-04-20 23:32:33
这里有一个例子--但是,作为一般规则,您不应该使用通配符导入(仅在狭义的情况下,并且只在定义__all__的情况下使用)。
# Directory structure.
.
├── foopack/
│ ├── __init__.py
│ ├── data.py
│ └── plot.py
└── run.py
# foopack/data.py
class Data(object):
def blah(self):
print self.x
# foopack/plot.py
def dplot():
print 'dplot()'
# foopack/__init__.py
# Here we use relative imports and define __all__.
from .data import Data
from .plot import dplot
__all__ = 'Data dplot'.split()
# A demo script: demo.py
from foopack import *
d = Data()
d.x = 32
d.blah()
dplot()https://stackoverflow.com/questions/23188047
复制相似问题