pycharm中相对路径的问题,解惑attempted relative import with no known parent package以及超出了顶层package进行相对导入问题

目录结构

在这里插入图片描述

一、首先我们设置好工作路径

把relative设为resource root,并且为每个py文件设置好工作路径
在这里插入图片描述

二、测试代码

# moduley.py
from .modulex import add
from .. import modulea

def new():
    modulea.abc()
    add()
# modulex.py
def add():
    print("成功调用add")
# modulea.py
def abc():
    print("成功调用abc")
# temp.py
from subpacket1 import moduley

moduley.new()

直接运行moduley.py,报错如下
在这里插入图片描述
这里 f r o m . . from .. from.. 也会报错,只是因为 f r o m . m o d u l e x from .modulex from.modulex先执行
报错原因是因为,在使用相对路径时,其父模块需要被加载,某一py文件被执行时,其所在的目录级下文件是加载到系统中的,这时可以使用绝对路径,例如

# moduley.py
from modulex import add

这样是不会报错的(虽然在pycharm中会标红),但是如果想引入mudulea.py中的函数,则需使用从根目录开始的绝对路径,因为modulea.py是直接在根目录下的,只需直接import就好,这时文章开头的resource root的设置就很重要。

import modulea

这样,直接运行moduley.py就不会报错了

三、相对路径的使用

虽然更改一下就不会报错,但是我们还是希望使用相对路径,实际上,在当前执行py文件父模块被加载后,执行该文件是不会报错的,说明如下:

将文件目录更改如下

在这里插入图片描述
运行temp.py时,同级文件和文件目录已经被加载,也就是subpacket1已经被加载,也就是moduley,py中 f r o m . . from .. from.. . . .. ..被加载,这时就可以使用相对路径。而temp.py
还是不能使用相对路径,因为执行temp.py时,其同级文件被加载,但是其父模块没有被加载,所以不能使用相对路径,只能使用绝对路径,使用绝对路径时,temp.py同级目录被加载,绝对路径也就是从这一级开始。

总结

py文件执行时,会把同级文件和文件目录加载,如果某py文件在执行时想使用相对路径,需要该文件父模块被加载,否则只能使用绝对路径,绝对路径的使用仍然是看文件或者文件目录加载情况

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

慷慷

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值