相关疑难解决方法(0)

Python >= 3.3 中命名空间包的相对位置和内容

我阅读了文档和相当多的 stackoverflow 帖子,但没有找到明确的答案来解决我的疑问。

我想我明白命名空间包的用途。

我只对 Python>=3.3 和隐式命名空间包感兴趣 - 没有__init__.py.

问题

  1. 命名空间包是否应该只包含其他包,或者模块(即.py文件)也“允许”?

  2. 命名空间包是否应该仅用作“容器”包,或者它们也可以包含在常规包中吗?

  3. 如果命名空间包只作为容器有意义,我想我可以声明,每当我有一个真正的包文件夹时,它的所有包含 python 模块的子文件夹也应该__init__.py?

# this is fine
ns_package/
+-- real_package/
   +-- __init.py__

# how about this?
real_package/
+-- __init.py__  # I have it for docs AND want to force the dir to be a real package
+-- ns_package/  # I would just like to avoid an empty __init__.py
   +-- amodule.py
Run Code Online (Sandbox Code Playgroud)

我怀疑名称空间包仅作为容器才有意义,因为在其他情况下,我将无法使用不同路径中的其他内容扩展名称空间,因为父级是一个真正的包,必须在单个点中定义文件系统。因此我不会获得命名空间包的主要优势。

语境

我问这个问题是因为在运行和导入模块(从项目的根目录)时,常规包内包含隐式名称空间包的情况工作得非常好。然而,它需要对安装的设置脚本进行一些调整,我想知道我一开始是否做了一些有缺陷的事情。

注意:我尝试使用隐式命名空间包主要不是因为我想利用它们的功能,而是因为我讨厌空 …

python python-3.x namespace-package python-packaging

5
推荐指数
1
解决办法
1603
查看次数