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,将该普通目录添加进系统路径:
PyCharm 导入普通目录下的模块时报错:ImportError: attempted relative import with no known parent package_第1张图片

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

from common.mail_helper import send_vcode

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

你可能感兴趣的:(Python开发学习笔记,python,package,module)