我有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.py
从utils.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.insert
和sys.path.append
,但都无济于事。