我有一个 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 中有很多关于相对导入的问答。因为某种原因。如果您不知道自己在做什么,可能会有点晦涩难懂。由于这个问题经常被回答,并且在各个细节层面上都得到了回答,所以我将在这里简短地介绍一下。只要用谷歌搜索你的错误,你就会找到很多答案。
只是一些关键字供您搜索:对于相对导入机制来说,重要的是全局变量
__package__
和PYTHONPATH
。在大多数情况下,遇到此错误时,您会发现 __package__
是 None
。
解决方案
创建一个父包来包装您的模块。然后确保该父包可从
PYTHONPATH
获得。在 Pycharm 中,例如您可以通过将 src
目录标记为“sources root”来实现此目的。此外,您必须确保以设置 __package__
的方式调用脚本。如果您从命令行执行此操作,请将其作为模块执行,即python -m mypackage.main.whatever
。在 Pycharm 中,如果您将其标记为“源根”,则一切都应该开箱即用。