在Pycharm中的相对导入

4

一些权威人士已经对在模块目录中运行脚本时出现的相对导入问题进行了评论和/或回答,可以在此处找到链接:Python 3中的相对导入

我的问题是Pycharm IDE正在解析该模块并在同一目录中运行它。因此我遇到了导入错误。请注意,该包中有一个__init__.py文件。看起来对于pycharm解析器来说是正常的。

enter image description here

from . logger import *   # Logger is a module in same package

但是 ..

enter image description here

Traceback (most recent call last):
  File "/git/bluej/fusion/python/pointr/bluej/util/DB.py", line 6, in <module>
    from . logger import *
ImportError: attempted relative import with no known parent package

Run Configuration 是通过在模块中右键单击创建的。自动生成的版本类似于: 将 working directory 与脚本目录相同。 /git/bluej/fusion/python/pointr/bluej/util (注意包名为 pointr.blue.util):

enter image description here

我尝试将工作目录放在基本的python目录级别下:/git/bluej/fusion/python/

enter image description here

然而这并没有产生任何影响。
回应评论:logger 不是根包,所以以下代码无效:

enter image description here

我该如何在Pycharm中开发、调试和运行使用相对导入的模块?

在终端中,您需要查看执行代码的目录位置,以确定该代码是否依赖于其他包。在Pycharm中,假定目录是项目的基本目录,并且所有代码都是从该目录级别而不是包/模块级别执行的,就像您在终端中尝试执行的那样。如果您从目录级别执行它,则可能可以正常工作。 - sahasrara62
@sahasrara62 我是在 Pycharm 内部运行,而不是终端。 - WestCoastProjects
from . logger import * 这里有空格的拼写错误吗?如果是的话,请改为 from .logger import *,此外这个链接可能会对你有所帮助:https://napuzba.com/a/import-error-relative-no-parent。 - sahasrara62
我刚刚尝试创建了这个示例项目代码,如果你只是执行 from logger import * 并以你正在执行此脚本的方式运行,它将正常工作(不知道为什么 . 在这里理想情况下不起作用)。 - sahasrara62
from logger import * 不起作用,因为 logger 不是基本级别的包:请参见我的更新问题。 - WestCoastProjects
显示剩余3条评论
1个回答

4

enter image description here

  • 将脚本名称更改为模块名称:请参见配置下的第一个选择
  • 将工作目录更改为层次结构的根目录
  • 希望一切顺利

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接