You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在自有Python包中正确引入GitHub第三方包并解决导入错误?

解决自有包中引入第三方包的导入问题

这是Python包开发里很常见的导入路径坑,我给你几个实用的解决方案,你可以根据自己的场景选:

方法一:修改第三方包内部的导入为相对导入

直接调整someones_package/file2.py里的导入语句,把原来的:

import file1

改成相对当前包的导入写法:

from . import file1

这样不管外部的基准目录是什么,file2.py都会从自己所在的someones_package目录里找file1.py,完美适配它现在作为子包的位置。

注意:如果之后你要更新这个第三方包,可能需要重新修改导入语句,这点要提前记下来。

方法二:把第三方包目录加入Python的搜索路径

在你的my_package/__init__.py里添加一段代码,把someones_package的目录加到Python的模块搜索路径sys.path中:

import sys
import os

# 获取当前my_package目录的绝对路径
current_dir = os.path.dirname(os.path.abspath(__file__))
# 拼接someones_package的路径并加入sys.path
sys.path.append(os.path.join(current_dir, "someones_package"))

这样Python在执行file2.py里的import file1时,就会自动去someones_package目录里查找,自然能找到file1.py。这种方法不用改动第三方包的原代码,适合不想破坏原包结构的场景。

方法三:规范包结构,确保子包的导入合法性

首先确认someones_package目录下有没有__init__.py文件(Python3.3+支持无__init__.py的命名空间包,但加上它能让包结构更清晰,兼容性更好),然后在my_package/__init__.py里明确导出这个子包:

from . import someones_package

之后你在外部导入时,用from my_package import someones_package或者import my_package.someones_package,配合方法一的相对导入,整个包的结构就完全符合Python的包规范了,导入问题也能彻底解决。

额外小提示

测试的时候尽量避免直接在my_package目录下运行脚本,最好从my_package的上级目录执行导入操作,比如:

# 在my_package的上级目录运行这个脚本
import my_package.someones_package.file2

这样能避免工作目录干扰导入路径,减少不必要的问题。

内容的提问来源于stack exchange,提问作者user8483278

火山引擎 最新活动