首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python模块导入第三方库中复制的

Python模块导入第三方库中复制的
EN

Stack Overflow用户
提问于 2021-03-22 12:18:22
回答 1查看 50关注 0票数 0

我知道python模块导入问题在课程中是相当常见的,通常我对它的工作方式相当有能力,但是我所处的这种情况完全让我感到困惑。

我有一个结构类似于此的项目:

代码语言:javascript
复制
myproj
|- __init__.py
|- somefile.py

这很简单,在TorchServe中的AWS TorchServe上运行也很好(尽管这并没有那么重要)。

现在,我在一个库中复制到我的项目的根,这随后有子文件夹(模块),其中引用其他的。

代码语言:javascript
复制
myproj
|- __init__.py
|- somefile.py
|- third_party_lib
    |- models
    |   |- A.py
    |- utils
        |- B.py

在我的主somefile.py中,我有一个类似于

代码语言:javascript
复制
from third_party_lib.models.A import XYZ

在文件A中有一个导入。

代码语言:javascript
复制
from utils.B import XYZ

这就是事情失败的地方,有许多类似于此的内部导入是无法解决的。

第三方库没有init.py,但是我尝试添加一个,但这并没有解决问题。我还尝试在sys.path.append文件夹上使用third_party_lib ()扩展路径。

在这种情况下,由于third_party_lib是一个git子树,不是由我自己维护的,所以如果可能的话,我更愿意在它内不做任何更改(否则,将来在进行上游更新时,事情会变得很混乱),但是如果需要的话,我可以在其中放置一个init.py,因为这很容易维护。

我现在有点不知所措,我希望这是Python模块如何工作的简单困惑之一。

谢谢您的帮助,如果您需要更多的信息,请告诉我。

EN

回答 1

Stack Overflow用户

发布于 2021-03-22 13:38:25

我很不好意思承认,但这是我的愚蠢错误。万一有人遇到类似的问题,那就是我改进sys路径的方式。

代码语言:javascript
复制
from pathlib import Path
sys.path.insert(0, (Path(__file__).parent / 'some_folder').resolve())

很容易忽略的问题是,放入路径数组中的项实际上是Path对象!不是字符串,解决方案是将路径调用包装在str()中。

代码语言:javascript
复制
from pathlib import Path
sys.path.insert(0, str((Path(__file__).parent / 'some_folder').resolve()))

这是一件非常简单的事情,特别是当我每次打印sys.path时,但是很容易忽略数组中的项实际上是用PosixPath("xxxxxxxxxxx")包装的,而不是原始的str。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66745876

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档