Python 3.x 对包使用与命名空间包依赖项相同的名称
我使用的是Python 3.8.2,我创建了一个名为Python 3.x 对包使用与命名空间包依赖项相同的名称,python-3.x,Python 3.x,我使用的是Python 3.8.2,我创建了一个名为fruit的命名空间包。此命名空间包的结构如下所示: fruit └── banana └── __init__.py 这里的\uuu init\uuuu.py文件只包含fruit=“banana” 注意,我正在使用隐式名称空间包(根据Python 3.3)创建这个包,并使用packages=find_namespace\u包(包括=['fruit.banana','fruit.banana.*]])在setup.py中引用包 我面临
fruit
的命名空间包。此命名空间包的结构如下所示:
fruit
└── banana
└── __init__.py
这里的\uuu init\uuuu.py
文件只包含fruit=“banana”
注意,我正在使用隐式名称空间包(根据Python 3.3)创建这个包,并使用packages=find_namespace\u包(包括=['fruit.banana','fruit.banana.*]])
在setup.py中引用包
我面临的问题发生在使用相同包命名的项目中使用依赖项时。使用依赖项的项目结构示例:
fruit --> top level package name
├── __init__.py
└── banana
├── __init__.py
└── run.py
两个\uuuu init\uuuuu.py
文件都是空的,run.py
文件的内容如下:
from fruit.banana import fruit
if __name__ == '__main__':
print(fruit)
当运行这个run.py
时,我得到一个ImportError:无法从'fruit.banana'导入名称'fruit'(/path/to/project/../fruit/banana/\uuu init\uuuuuuuuuuuy.py)
。但是,当我将上面目录结构中用顶级包名标记的包名更改为除fruit
之外的任何内容时,它运行正常
创建带名称空间的包时,如何重用相同的包名?与本文相关:似乎“旧的”pkgutil
样式的名称空间确实有效,但新的隐式名称空间无效。因此,当在依赖项和使用依赖项的项目中声明某个名称空间时,它确实起作用。