我正在使用提供的方法为我的 Python FastAPI 项目创建可执行文件。由于它是一个基于人工智能的项目,因此它包含用于处理嵌入的矢量数据库。我正在使用
chromadb
包来处理嵌入。当我创建构建时,它已成功创建。但是当我尝试运行项目的 exe 文件时,它到达了 import chromadb
行。它会生成如下异常:
File "chromadb\utils\embedding_functions\__init__.py", line 57, in DefaultEmbeddingFunction
NameError: name 'ONNXMiniLM_L6_V2' is not defined
[PYI-12904:ERROR] Failed to execute script 'main' due to unhandled exception!
我已手动检查我是否可以使用标准
uvicorn
和使用 Docker
来运行我的项目。但是当我尝试使用 pyinstaller
打包我的项目时,它会生成异常。
附注我在创建可执行文件时激活环境,以便所有包都绑定到我的应用程序中(也尝试过不使用它)。
如果需要任何进一步的信息,我也可以这样做。
最好的, 穆罕默德·哈桑
这是我尝试创建项目的可执行文件的方法:
pyinstaller --name tempname --onefile --specpath . main.py
我也尝试过:
pyinstaller -F main.py --clean
我已经手动检查了
ONNXMiniLM_L6_V2
错误,我可以看到这些嵌入是可用的。
我也安装了支持包onnxruntime
。
当我为 FastAPI 应用程序创建可执行文件时,我希望可执行文件能够运行,并在
pyinstaller
的帮助下创建 exe 时激活环境。
您应该将 ChromaDB
onnx_mini_lm_l6_v2
包含在 .spec 文件的隐藏导入中:
hiddenimports=["chromadb.utils.embedding_functions.onnx_mini_lm_l6_v2",]
根本原因是pyinstaller在构建时没有包含这个文件,但是通过python动态导入在默认模型中需要类ONNXMiniLM_L6_V2
。
请尝试此代码并给我结果,谢谢!