运行dramatiq test.py报错‘test’不是包,求技术解决方案
解决Dramatiq启动Worker时的ModuleNotFoundError问题
问题根源
dramatiq命令要求传入Python模块的导入路径,而非直接传入.py文件名;同时你的apptest包未被Python识别为可导入的模块,导致无法找到目标函数。
解决方案
1. 切换到正确的工作目录
打开终端,进入projectDirectory目录(即apptest所在的父目录):
cd /path/to/projectDirectory
2. 使用模块路径启动Worker
用包+模块的路径格式替换原命令,执行:
dramatiq apptest.test
这条命令会告诉dramatiq从apptest包中导入test模块,进而找到被@dramatiq.actor装饰的lenstring函数。
3. 确保Python能识别apptest包
如果执行上述命令仍报错,手动将projectDirectory添加到Python路径:
- Linux/macOS:
export PYTHONPATH=/path/to/projectDirectory - Windows(CMD):
set PYTHONPATH=C:\path\to\projectDirectory - Windows(PowerShell):
$env:PYTHONPATH = "C:\path\to\projectDirectory"
4. 提前验证导入是否正常
在Python交互环境中执行以下命令,确认模块能被正常导入:
from apptest.test import lenstring
如果没有报错,说明路径配置正确,再启动dramatiq Worker即可。
为什么原命令会失败
- 输入
dramatiq test.py时,dramatiq会尝试导入名为test.py的模块,而Python模块名不允许包含.,直接触发错误。 - 若你在
apptest目录下执行命令,Python会将当前目录视为顶层,但test是单个文件而非包,因此提示"test不是包"。
内容的提问来源于stack exchange,提问作者Alfredo Godoy
相关产品推荐
相关产品推荐

