当前位置:  开发笔记 > 编程语言 > 正文

将单独的python包放入相同的命名空间?

如何解决《将单独的python包放入相同的命名空间?》经验,为你挑选了1个好方法。

我正在开发一个python框架,它将"插件"写成单独的包.即:

import myframework
from myframework.addons import foo, bar

现在,我正在尝试安排的是这些插件可以与核心框架分开分发并注入myframework.addons命名空间.

目前,我对此的最佳解决方案如下.将部署一个附加组件(最有可能{python_version}/site-packages/如此:

fooext/
fooext/__init__.py
fooext/myframework/
fooext/myframework/__init__.py
fooext/myframework/addons/
fooext/myframework/addons/__init__.py
fooext/myframework/addons/foo.py

fooext/myframework/addons/__init__.py将有pkgutil路径扩展代码:

import pkgutil
__path__ = pkgutil.extend_path(__path__, __name__)

问题是,为了使这个工作,PYTHONPATH需要有fooext/它,但它唯一的东西是父安装目录(很可能是上面提到的site-packages).

这个问题的解决是有额外的代码,myframework/addons/__init__.py这将tranverse sys.path,寻找与myframework子包,在这种情况下将其添加到任何模块sys.path和一切正常.

我的另一个想法是直接编写addon文件来myframework/addons/安装位置,但是它会使开发和部署的命名空间不同.

是否有更好的方法来实现这一点,或者可能采用不同的方法解决上述分配问题?



1> 小智..:

请参阅名称空间包

http://www.python.org/dev/peps/pep-0382/

或者在setuptools中:

http://peak.telecommunity.com/DevCenter/setuptools#namespace-packages

推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有