可编辑依赖中的Python冲突模块名称

时间:2019-09-25 06:38:48

标签: python python-import python-module python-packaging

我有2个独立的Python软件包,我都开发了这两个软件包。假设PackageA是我创建的程序包,而PackageB是公共程序包的分支版本,在其中我做了一些更改。 PackageA依赖于PackageB的更改版本。最初,这是程序包的结构:

PackageA/
    __init__.py
    lib/
        __init__.py
        separate_utils.py
    scripts/
        __init__.py
        script.py
    PackageB/
        lib/
            utils.py
        package/
            class.py

在程序包B中,class.pyutils.py导入函数。在script.py中,我同时使用了separate_utils.py中的函数,但我也使用了class.py模块。使用这种原始的包结构,在script.py中,我具有以下导入:

from lib.separate_utils import random_function
from PackageB.package import class

但是,在class.py中有以下导入语句:

from lib import utils

由于我的目录结构,它尝试从utils而不是PackageA/lib导入PackageA/PackageB/lib,这将引发错误(cannot import name 'utils' from 'lib')。结果,我更改了目录结构,以使PackageB是可编辑的程序包。

Random folder/
    PackageA/
        __init__.py
        lib/
            __init__.py
            separate_utils.py
            scripts/
            __init__.py
            script.py
    PackageB/
        __init__.py
        lib/
            utils.py
        package/
            class.py
        setup.py

但是,即使成功安装了pip install -e [path_to_PackageB],我仍然得到确切的cannot import name 'utils' from 'lib'错误。我无法弄清楚为什么会发生这种情况,而且我已阅读了所有Python模块文档以及大量不同的StackOverflow问题和博客文章。

我尝试了诸如from __future__ import absolute_import之类的不同排列方式,包括每个目录中的空__init__.py文件,并使用sys.path.insertsys.path.append,但都无济于事。

0 个答案:

没有答案