PyCharm 导入普通目录下的模块时报错:ImportError: attempted relative import with no known parent package

问题

在 PyCharm 中,有时需要新建一个普通目录,放入相应的模块文件来进行一个全局的配置应用,但是在引用该普通目录下的模块时,会出现一些错误,就是无法正常导入。

例如我这里建立一个普通文件夹:common,里边新建了两个模块文件:mail_helperstring_helper

目录结构如下:

├─common
│  │  mail_helper.py
│  │  string_helper.py

我需要在 mail_helper 中相对导入同级目录下的 string_helper 模块中的 gen_vcode 函数:

mail_helper.py:

from .string_helper import gen_vcode

这样的话就会出现如下错误信息:
在这里插入图片描述

分析

出现该问题的原因是因为如果要使用相对路径,采用 . 或者 .. 进行导入的话,那么同级目录或者上级目录就必须在目录下新建 __init__.py 文件,让 Python 解释器将其视作一个 Python 包,才能采取这种相对导入的方式。

解决

同级模块内导入

其实普通目录下的相对引用直接采取如下方法就行了:

from string_helper import gen_vcode

如果采用绝对路径导入的话,例如如下目录结构(django_study01 也是一个普通目录):

├─django_study01
│  ├─common
│  │  │  mail_helper.py
│  │  │  string_helper.py

其引用形式为:

from django_study01.common.string_helper import gen_vcode
同级模块外导入

如果在 common 目录之外进行导入时,可以在 pycharm 中右击文件夹将 common 文件夹标记为 source root,将该普通目录添加进系统路径:
在这里插入图片描述

然后直接通过如下方式导入即可:

from common.mail_helper import send_vcode

标记后,运行 print(sys.path),就可以看到该目录已经被添加进了系统路径:
在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值