1

我有这样的布局:

src
   __init__.py
   main.py
   examples
      __init__.py
      example_project.py
   library
      __init__.py
      some_library_code.py

example_project.py使用some_library_code.py
我运行的代码example_project.py
***\src>: python examples\example_project.pyImportError: attempted relative import with no known parent package
阅读了一些关于 SO 的答案,发现我需要一些结构
sys.path.append(os.path.normpath(os.path.join(os.path.dirname(os.path.abspath(__file__)), os.pardir)))
存在example_project.py

我的example_project.py导入部分如下所示:

import os, sys
sys.path.append(os.path.normpath(os.path.join(os.path.dirname(os.path.abspath(__file__)), os.pardir)))

from ..library import some_library_code

但这不起作用并且显示相同ImportError

UPD
如果我更改from ..library *****from library *****then 它可以工作,但 IDE 无法识别导入的类型并在import子句周围显示错误

4

3 回答 3

1

恢复 sys path hacks,而是将您的代码运行为:

***\src>: python -m examples.example_project

这种方式告诉 python 运行中的模块 。否则,python 无法(当您直接运行脚本时)知道该脚本是包的一部分 - 因此会出现错误。syspath hack 将以微妙的方式失败(IDE 不能真正遵循那些动态 sys 路径添加 - 有一些设置但随后开始变得复杂,因此 hack - 但即使是未定义的行为也会产生最坏的后果)同时运行你的脚本使用根包的父目录中的 -m 开关是运行脚本的推荐方式。example_project examples

于 2021-03-30T12:14:13.183 回答
0

您忘记添加文件夹__init__.pylibrary这是文档https://docs.python.org/3/reference/import.html#regular-packages

于 2021-03-29T03:58:13.777 回答
0

尝试从library.some_library_code import Something.

于 2021-03-29T04:00:21.253 回答