文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

python包相对导入

2023-01-31 08:20

关注
  • 绝对路径导入格式为import a.b或者from a import b,相对路径导入格式为from . import b或者from ..a import b

  • python2默认为相对路径导入,python3默认为绝对路径导入。

  • 为使python2,3通用,建议采用相对路径导入from .a import b

  • 一个目录存在__init__.py文件,则该目录成为一个包。

  • 包中的一个模块可以采用相对路径导入包,不影响模块功能;一个py脚本(未成为模块,即其目录及父目录内无__init__.py)可以采用相对路径导入包,并以脚本模式运行。但包含相对导入的模块,不能直接以脚本模式运行,常见报错为:

# python2
Traceback (most recent call last):    File "module_x.py", line 1, in <module>      from . module_y import spam as ham  ValueError: Attempted relative import in non-package
# python3
Traceback (most recent call last):    File "module_x.py", line 1, in <module>      from . module_y import spam as ham  SystemError: Parent module '' not loaded, cannot perform relative import

解决方案:

建立示例文件结构如下:
注:以/结尾的为文件夹。

/home/zhkai/
            mobike/
                  __init__.py
                  utils.py
                  data_process/
                          loc.py

注意此时mobike成为一个python包。
loc.py中导入utils.py该怎么办?

方法1:将mobike包导入系统路径

loc.py中导入util的方法为:

import sys
sys.path.append('/home/zhkai')
from mobike.utils import read_csv 

需要注意,这里导入系统路径的是mobike所在目录的路径,路径本身不包含mobike。
此时utils就像自带的python包一样,loc.py可直接运行。

【推荐】方法2:修改运行命令

python的man page里有这个参数:

-m module-name 
   Searches  sys.path for the named module and runs the corresponding .py file as a script. 

所以可以在不修改模块代码文件的情况下:
代码文件仍为相对路径:

from ..utils import read_csv

切换到mobike包同级目录下执行:

☁  ~  python3 -m mobike.data_process.loc

注意:此时若loc.py代码中有其他相对路径,此时的相对路径是基于shell命令所在位置,即~的,可能会造成错误。import语句中的相对路径,仍是基于文件所在位置,故不影响。

推荐这种方法,因为无需修改代码文件。

还有句话不太理解:
如果一个模块被直接运行,则它自己为顶层模块,不存在层次结构,所以找不到其他的相对路径。


参考:
Python 相对导入与绝对导入

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯