Python 具有核心部分的命名空间包?
这项质询是跟进及跟进的 注意,和,其中说明: 在命名空间包的Python 具有核心部分的命名空间包?,python,setuptools,namespace-package,Python,Setuptools,Namespace Package,这项质询是跟进及跟进的 注意,和,其中说明: 在命名空间包的\uuu init\uuuu.py中不能包含任何其他代码和数据。即使在开发过程中,或者当项目作为.egg文件安装时,它可能会起作用,但当项目使用“系统”打包工具安装时,它将不起作用–在这种情况下,\uuu init\uuuuuupy文件将不会安装,更不用说执行了 这一切似乎使得拥有一个包含独立分布的扩展子包的“主库”包变得不可能。我想要的是能够: 定义一个核心库包,如下所示: import mylibrary mylibrary.s
\uuu init\uuuu.py
中不能包含任何其他代码和数据。即使在开发过程中,或者当项目作为.egg
文件安装时,它可能会起作用,但当项目使用“系统”打包工具安装时,它将不起作用–在这种情况下,\uuu init\uuuuuupy
文件将不会安装,更不用说执行了
这一切似乎使得拥有一个包含独立分布的扩展子包的“主库”包变得不可能。我想要的是能够:
import mylibrary
mylibrary.some_function()
import mylibrary.myextension
mylibrary.myextension.some_other_function()
import mylibrary
mylibrary.some_function()
import mylibrary.myextension
mylibrary.myextension.some_other_function()
我本来希望能够用名称空间包实现这一点,但基于上面的问题和链接,情况似乎并非如此。这到底可以做到吗?对于PEP 420命名空间包,确实不可能在顶级
\uuuu init\uuuuuuuuuuuuuuy.py
中包含代码
如果我是你,我会:
PEP 420的基本原理部分解释了为什么
\uuuu init\uuuuu.py
不能包含任何代码。严格地说,您可以在mylibrary
下有变量,但无法在那里定义它们。例如,您可以:
# mylibrary/core.py
import mylibrary
def some_function():
pass
mylibrary.some_function = some_function
您的用户可以像这样使用它:
import mylibrary.core
mylibrary.some_function()
也就是说,
mylibrary.core
monkey补丁mylibrary
,这样,除了导入,它看起来好像somefunction
是在mylibrary
中定义的,而不是一个子包。Eric,在案例2中,mylibrary
也必须是一个命名空间包,对吗?我仍然不敢相信现代Python仍然是这样。这无疑使在命名空间包中为方便而定义核心部分变得非常“困难”:/