Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 对包使用与命名空间包依赖项相同的名称_Python 3.x - Fatal编程技术网

Python 3.x 对包使用与命名空间包依赖项相同的名称

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中引用包 我面临

我使用的是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 --> 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
样式的名称空间确实有效,但新的隐式名称空间无效。因此,当在依赖项和使用依赖项的项目中声明某个名称空间时,它确实起作用。