【笔记13】完美解决了!关于python的相对导入和绝对导入

本文主要介绍了Python中的相对导入和绝对导入,包括它们的使用原则和常见问题。针对“Attempted relative import in non-package”错误,提出了修改导入方式和调整环境变量的解决方案。同时,解释了Python导入模块的搜索路径,并提供了不同层级模块间的导入示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


最近在学习别人写的程序,有位大神把其他经典算法都实现了,baseline包全弄好了,我真是兴冲冲,提起袖子膜拜大神,没想到环境都build好了,在引自己的各种模块时频频报错,深知是引用的问题,Google了半天都没弄好,最后经过耐心探索 在不小心把自己的.bashrc环境删掉还重配了conda之后,总结了怎么解决引用问题的方法。

解决方案

先把出现报错的解决方案放在前面:
检查哪种错误:

ValueError: Attempted relative import in non-package
说明存在相对导入语句的模块,不能直接运行,把相对导入改成绝对引用。

No module named ‘…’
说明路径不对,找不到模块。

如果是绝对导入,一个模块只能导入自身的子模块或和它的顶层模块同级别的模块及其子模块
如果是相对导入,一个模块必须有包结构且只能导入它的顶层模块内部的模块

  1. 找不到模块时,先看看有没有__init__.py文件在该包里,告诉导入指令我包在这。
  2. 如果要把相对导入改为绝对导入,from __future__ import absolute_import(仅禁用隐式相对导入),Python2.x 缺省为相对路径导入,Python3.x 缺省为绝对路径导入。
  3. 万能法。直接把该文件夹看作一个workspace,路径加入环境变量中。(这里考虑加入用户的环境变量,而不是全局的系统变量),在用户home路径下可以看是否有这个隐藏文件ls -a,~表示用户home目录。
    vim ~/.bash_profile
    进入vim编辑器,随意i\o\a进入编辑模式
    export PYT
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值