代码之家  ›  专栏  ›  技术社区  ›  Евгений Шахов

Python 3.6中的相对导入

  •  0
  • Евгений Шахов  · 技术社区  · 6 年前

    我想在Python 3中使用相对导入。

    我的项目:

    main_folder
      - __init__.py
      - run.py
      - tools.py
    

    我想参加跑步。py公司( MyClass 在\uu init\uuuu中声明。py):

    from . import MyClass
    

    并在运行中。py:

    from .tools import my_func
    

    ImportError 是升起。

    或者,使用绝对导入时,PyCharm中的调试不起作用,库从安装的包中获取,而不是从我的目录中获取。

    我知道一种方法,但很可怕:

    sys.path.append(os.path.dirname(os.path.realpath(__file__)))
    

    如何在我的项目中使用此导入?

    1 回复  |  直到 5 年前
        1
  •  1
  •   Joshua Yonathan    6 年前

    当您使用PyCharm时,它会自动将当前模块设为main,因此 from . import <module> 不起作用。 read more here .

    要解决您的问题,请将 __init__.py tools.py 子目录中的文件

    main_directory/
        run.py
        sub_directory/
            __init__.py
            tools.py
    

    在您的 run.py 文件中,编写以下内容作为导入语句

    from sub_directory import tools
    from sub_directory.__init__ import MyClass
    

    编辑: 正如@9000所提到的,你可以写 from sub_directory import MyClass 实现同样的目标。