导入具有相同基本包名称的包

时间:2017-10-11 10:03:23

标签: python packages

我想要拆分一个大型图书馆。有包裹: hdx.data hdx.facades hdx.utilities

我想将hdx.utilities移动到一个单独的项目hdx-python-utilities(在PyPi上),然后将其作为需求添加到项目中,包含hdx.data和hdx.facades(hdx-python-api) 。问题是我在项目hdx-python-api中执行ImportError: No module named 'hdx.utilities'时得到from hdx.utilities.session import get_session

有没有什么方法可以在Python 3+和2.7中完成这项工作(无需在其中任何一个中重命名顶级包名称hdx),允许hdx-python-api和hdx-python-utilities在任何项目中都可以工作安装它们?

1 个答案:

答案 0 :(得分:1)

There are three ways of doing namespaced packages

  • Native(Python 3.3)
  • pkgutil-style(Python 2和3,与原生兼容)
  • pkg_resources-style(与上述不兼容,不推荐使用,不推荐使用)

为Python 2和3执行命名空间包的推荐方法是pkgutil-style namespace packages

您可以为hpx-python-api

创建以下内容
setup.py
hpx/
    __init__.py     # namespace init, see content below
    data/
        __init__.py
        ...
    facades/
        __init__.py
        ...

以及hpx-python-utilities

的以下内容
setup.py
hpx/
    __init__.py     # namespace init, see content below
    utilities/
        __init__.py
        ...

命名空间包的两个__init__.py文件只需包含以下内容:

__path__ = __import__('pkgutil').extend_path(__path__, __name__)
相关问题