【发布时间】:2021-03-22 12:18:22
【问题描述】:
我知道 python 模块导入问题是本课程的标准问题,通常我对它的工作方式相当有能力,但是我所处的这种情况完全让我感到困惑。
我有一个类似这样结构的项目:
myproj
|- __init__.py
|- somefile.py
这很简单,并且在 TorchServe 中的 AWS SageMaker 上运行时运行良好(尽管这并不那么相关)。
现在我在一个库中复制到我的项目的根目录,这随后有子文件夹(模块)引用其中的其他人。
myproj
|- __init__.py
|- somefile.py
|- third_party_lib
|- models
| |- A.py
|- utils
|- B.py
在我的主要somefile.py 中,我有一个类似的导入
from third_party_lib.models.A import XYZ
在文件 A 中有一个导入,例如
from utils.B import XYZ
这是事情失败的地方,有许多与此类似的内部导入无法解析。
第三方库没有 init.py 但是我尝试添加一个并没有解决问题。 我还尝试在 third_party_lib 文件夹中使用 sys.path.append() 来增加 PATH。
在这种情况下,由于third_party_lib 是我自己不维护的 git 子树,我宁愿尽可能不对其进行任何更改(否则将来在拉取上游更新时事情会变得一团糟),但是我如果需要,可以在其中放置一个 init.py,因为这很容易维护。
我现在有点不知所措,我希望这是对 Python 模块工作方式的简单混淆之一。
感谢您的帮助,如果您需要更多信息,请告诉我。
【问题讨论】:
-
from myproj.third_party_lib.models.A import XYZ有效吗?我很惊讶在根目录中看到__init__.py。myproj的父目录必须在sys.path上。 -
根目录中的 init.py 只是我在最后一天试图让这个工作的一个冰雹玛丽,我最初没有那个。我刚刚尝试了您对
from myproj.third_party_lib.model.A import XYZ的建议,现在得到了ModuleNotFoundError: No module named 'myproj'我开始怀疑这是否实际上是在 TorchServe 上运行并且文件夹名称可能正在更改等可能会使问题更加复杂。
标签: python python-module