当前位置:   article > 正文

PyCharm 导入普通目录下的模块时报错:ImportError: attempted relative import with no known parent package_from ..qxcommon.qxcommonenum import qxcomponentsiz

from ..qxcommon.qxcommonenum import qxcomponentsize importerror: attempted r

问题

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

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

目录结构如下:

├─common
│  │  mail_helper.py
│  │  string_helper.py
  • 1
  • 2
  • 3

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

mail_helper.py:

from .string_helper import gen_vcode
  • 1

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

分析

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

解决

同级模块内导入

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

from string_helper import gen_vcode
  • 1

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

├─django_study01
│  ├─common
│  │  │  mail_helper.py
│  │  │  string_helper.py
  • 1
  • 2
  • 3
  • 4

其引用形式为:

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

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

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

from common.mail_helper import send_vcode
  • 1

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小惠珠哦/article/detail/945322
推荐阅读
相关标签
  

闽ICP备14008679号