Python:没有已知父包的相对导入

问题描述 投票:0回答:1

我有一个 AWS Python lambda。目录结构如下》

src
    __init__.py
    main.py
    service.py

我正在

__init__.py
文件中启动数据库连接,然后在
main.py

中导入连接变量

from . import conn

我收到以下错误:

ImportError:尝试在没有已知父包的情况下进行相对导入。

我是 Python 新手,正在尝试掌握导入的窍门。

main.py
不应该访问
__init__.py
中的所有内容,因为它们位于同一个名为
src

的包中
python python-3.x aws-lambda relative-import
1个回答
0
投票

Python 中有很多关于相对导入的问答。因为某种原因。如果您不知道自己在做什么,可能会有点晦涩难懂。由于这个问题经常被回答,并且在各个细节层面上都得到了回答,所以我将在这里简短地介绍一下。只要用谷歌搜索你的错误,你就会找到很多答案。

只是一些关键字供您搜索:对于相对导入机制来说,重要的是全局变量

__package__
PYTHONPATH
。在大多数情况下,遇到此错误时,您会发现
__package__
None

解决方案

创建一个父包来包装您的模块。然后确保该父包可从

PYTHONPATH
获得。在 Pycharm 中,例如您可以通过将
src
目录标记为“sources root”来实现此目的。此外,您必须确保以设置
__package__
的方式调用脚本。如果您从命令行执行此操作,请将其作为模块执行,即
python -m mypackage.main.whatever
。在 Pycharm 中,如果您将其标记为“源根”,则一切都应该开箱即用。

© www.soinside.com 2019 - 2024. All rights reserved.