python - 在 Python 的子模块的 init.py 文件中使用 import 语句
问题描述
我有以下文件夹结构:
- a/
- test.py
- b/
- __init__.py (empty)
- c/
__init.py (imports classes from x.py and z.py)
x.py
z.py
test.py
内容:
from b.c import SomeClient
我正在尝试导入c
,test.py
但收到以下错误:
ModuleNotFoundError: No module named 'c'
__init__.py
文件夹下的内容c/
如下所示:
from c.x import SomeClient
from c.z import AnotherClient
我尝试c.
从 import 语句中删除指针,但它开始抛出错误,说没有名为x
or的模块z
。
解决方案
该文件a/b/c/__init__.py
导入相对于c
. 问题是隐式相对导入的使用(以及在此参考中)已经在 Python3 中删除:
不再有任何隐含的导入机制
要么在你的使用绝对导入a/b/c/__init__.py
from b.c.x import SomeClient
from b.c.z import AnotherClient
或显式相对导入
from .x import SomeClient
from .z import AnotherClient
如果这不可能,只需设置PYTHONPATH
指向c
可以找到目录的位置,以便 Python 在导入时可以看到其中的模块。如果在 Linux 中:
export PYTHONPATH=${PYTHONPATH}:/path/to/a/b
推荐阅读
- kotlin - mutableMap 中泛型类的强制转换
- javascript - 对象数组以表单数据格式 Javascript
- java - 如何在 Date Spring Query DSL 中计算不同的年份?
- powerbi - PowerBI过滤器不影响DAX中构造的表?
- asp.net-core - BotDetect 和 ASPNET Razor 页面未验证
- python - 导入库不能与 exec 函数一起使用?
- arrays - 尝试在 userdefaults 中设置数组时出错:线程 1:“尝试插入非属性列表对象
- node.js - 如何将 FCM 消息发送给不同的用户
- c# - Entity Framework Core 6(预览版)迫使我使用 .AsEnumerable()
- c# - 添加到 SortedList 中的列表