【问题标题】:relative import in pycharm 2018 does not work like relative import in python 3.6pycharm 2018 中的相对导入不像 python 3.6 中的相对导入那样工作
【发布时间】:2023-03-03 01:27:01
【问题描述】:

我已经阅读了关于 python 中相对导入的无休止的讨论,我认为它如此令人困惑的原因之一是它从一个 Python 版本更改为另一个(我的版本是 3.6)。但这里的罪魁祸首似乎是 PyCharm(除非我弄错了..),我想知道是否有人遇到过这个问题的解决方案。 对于具有此布局的项目:

/project
    |-- __init__.py
    |---subfolder
            |-- __init__.py
            |-- AA.py
            |-- BB.py

假设 AA.py 包含一些函数myfunc 在文件BB.py 中,如果我写这个导入:

from AA import myfunc

然后 python 完美地运行,但 PyCharm 将其视为错误:

为了让 PyC​​harm 满意,我可以将 . 添加到导入中,然后错误似乎就解决了:

from .AA import myfunc

但是后来python不高兴,给我报错:ModuleNotFoundError: No module named '__main__.AA'; '__main__' is not a package

总之,我使用实际有效的导入(即from AA import myfunc),但如果我能让 PyC​​harm 以某种方式同意它会很棒,因为它提供自动完成、转到定义等功能.

不重复: 我知道这个话题似乎被反复讨论过,但它也有很多方面。这里我说的是pycharm方面,因此据我所知这个话题是新的。

  1. How does PyCharm handle relative imports of modules? - 是未将根项目目录添加到 PYTHONPATH 的用户
  2. Pycharm auto relative imports - 谈论自动导入功能,但这里不是这样
  3. Subpackages and relative imports in PyCharm - 正在讨论 python 2.7 中的导入问题,但在这里我没有任何要导入的问题
  4. Relative imports for the billionth time - 对导入问题进行了很好的审查,并提供了非常详细的答案 - 这对我来说没有任何帮助,因为我没有任何导入问题。更不用说它是 python 2.7 主题而不是 3.x

【问题讨论】:

    标签: pycharm


    【解决方案1】:

    你可以通过使用让python和pycharm都同意

    from subfolder.AA import myfunc
    

    但是,根据herefrom .AA import myfunc 似乎是正确的语法。但不知道为什么它不起作用。

    【讨论】:

      【解决方案2】:

      在项目树中右键单击将subfolder 标记为Source Root -> 将目录标记为... -> Sources Root。 PyCharm 默认将所有 Source Roots 添加到 PYTHONPATH,因此问题应该得到解决

      问题是 PyCharm 不知道你要直接执行BB.py,例如假设您在根目录中有main.pyfrom subfolder import BB。调用 python main.py 将引发 ModuleNotFoundError: No module named 'AA'(确保使用 Python 3 以避免来自 Python 2 的隐式相对导入)。

      希望这是有道理的,我没有错过任何东西。

      【讨论】:

      • 但似乎具有相对导入的版本 from .AA import myfunc 不起作用,因为未定义 __package__。我们如何解决这个问题?
      • 如果为导入文件指定了子目录,它也可以在没有源根标记的情况下工作。
      • 谢谢先生,您拯救了我的一天!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-08
      • 2018-02-07
      • 2011-05-09
      • 2018-05-15
      • 2013-06-03
      • 2021-09-18
      • 2012-01-08
      相关资源
      最近更新 更多