如何使用IntelliJ处理Python中的相对导入

时间:2018-09-19 10:08:52

标签: python intellij-idea

相似的问题已经问了很多遍,但是我不知道在使用IntelliJ时该如何解决。

我有一个类似以下的目录


├── init .py。
├──子包装1
│├── init .py
│├──moduleX.py
├──子包装2
│├── init .py
│├──moduleY.py

moduleY中,我想使用相对导入语法导入moduleXfrom ..subpackage1 import moduleX

,并收到以下错误消息:

  

尝试了超出顶级软件包的相对导入

我知道可以通过将工作目录更改为“程序包”的顶部并在控制台中键入python -m package.subpackage2.moduleY来解决此问题。

但是我如何在IntelliJ中做到这一点?

1 个答案:

答案 0 :(得分:0)

以下应该有效:

props.location.state

此外,here

也对如何处理进口有很好的解释。

更新:

浏览了官方文档后,我意识到上述相对导入失败的原因是,在使用import sys from os import path sys.path.append( path.dirname( path.dirname( path.abspath(__file__) ) ) ) from subPackage1 import fileInSubPackage1 时,某些东西应该是一个包或多个包。 下图将对其进行进一步说明:

given this project structure

如果我们具有上述项目结构,并且想在from something import somefile中导入the_program.py,则必须编写file_random.py directory_one和package_inside_directory都是软件包。并且from directory_one.package_inside_directory_one import the_program将产生from ..package_two_inside_directory_one import the_program

现在,如果结构扩展到下面:

project structure extended

,我们在the_program.py中,要导入ValueError: attempted relative import beyond top-level packagefile_under_Subdirectory.py,我们只需遵循相同的规则:

more_tests.py