使用Pyarmor混淆FastAPI项目时遇ModuleNotFoundError问题求助
Pyarmor混淆FastAPI后ModuleNotFoundError解决方案
错误原因
混淆后的代码依赖Pyarmor生成的pyarmor_runtime_000000运行时模块,但该模块未被Python解释器找到,通常是路径配置问题或Uvicorn重载模式导致的子进程路径不一致。
解决步骤
1. 确认运行时模块位置
先检查混淆后的dist目录下是否存在pyarmor_runtime_000000文件夹,路径应为/home/israilovk/repositories/loan_monitoring/dist/pyarmor_runtime_000000。如果不存在,重新执行Pyarmor混淆命令,确保生成该模块。
2. 配置Python路径
方法一:通过环境变量指定
启动Uvicorn时,将dist目录添加到PYTHONPATH:
PYTHONPATH=/home/israilovk/repositories/loan_monitoring/dist uvicorn app:app --reload
方法二:在入口文件中手动添加路径
修改dist/app/__init__.py,在导入pyarmor_runtime的代码前添加路径配置:
import sys import os # 将当前文件所在目录添加到Python路径 sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) from pyarmor_runtime_000000 import __pyarmor__ # 后续代码...
注意:若Pyarmor混淆会覆盖入口文件,需在混淆脚本中自动注入这段代码,或通过Pyarmor配置指定路径。
3. 关闭Uvicorn重载模式
Uvicorn的--reload模式会启动子进程,子进程的Python路径可能与主进程不一致。尝试去掉重载参数启动:
uvicorn app:app
若必须使用重载,可配合--reload-dir指定监听目录,确保dist目录被包含:
PYTHONPATH=/home/israilovk/repositories/loan_monitoring/dist uvicorn app:app --reload --reload-dir dist/app
4. 检查Pyarmor混淆命令
确保混淆命令正确指定入口模块并输出到dist目录,示例:
pyarmor obfuscate --output dist app/__init__.py
该命令会将混淆后的代码和运行时模块一同生成到dist目录下。
5. 临时解决方案:安装运行时模块(不推荐)
若上述方法无效,可将pyarmor_runtime_000000安装到Python环境中(会失去部分混淆意义,仅作测试用):
cd /home/israilovk/repositories/loan_monitoring/dist pip install pyarmor_runtime_000000/
内容的提问来源于stack exchange,提问作者Kamol Israilov
相关产品推荐
相关产品推荐

