Pyinstaller: FileNotFoundError: MultiplexedPath должен содержать хотя бы один путь

Вопрос или проблема

У меня проблема с PyInstaller, когда я пытаюсь упаковать мой скрипт Python IA в исполняемый файл. Я продолжаю сталкиваться со следующей ошибкой:

FileNotFoundError: MultiplexedPath must contain at least one path

Вот полный трассировка:

Exception in Tkinter callback
Traceback (most recent call last):
  File "tkinter\__init__.py", line 1967, in __call__
  File "UX.py", line 99, in enter_key_event
  File "UX.py", line 44, in question
  File "UX.py", line 58, in execution_IA
  File "files\RAG_modif_pour_UX.py", line 249, in main
  File "files\RAG_modif_pour_UX.py", line 136, in add_to_chroma
  File "langchain_chroma\vectorstores.py", line 313, in __init__
  File "chromadb\__init__.py", line 334, in Client
  File "chromadb\api\client.py", line 58, in __init__
  File "chromadb\api\shared_system_client.py", line 19, in __init__
  File "chromadb\api\shared_system_client.py", line 30, in _create_system_if_not_exists
  File "chromadb\config.py", line 425, in instance
  File "chromadb\api\segment.py", line 124, in __init__
  File "chromadb\config.py", line 318, in require
  File "chromadb\config.py", line 425, in instance
  File "chromadb\db\impl\sqlite.py", line 74, in __init__
  File "importlib_resources\_common.py", line 46, in wrapper
  File "importlib_resources\_common.py", line 56, in files
  File "importlib_resources\_common.py", line 117, in from_package
  File "importlib_resources\future\adapters.py", line 65, in get_resource_reader
  File "importlib_resources\future\adapters.py", line 70, in _standard_reader
  File "importlib_resources\future\adapters.py", line 78, in _namespace_reader
  File "importlib_resources\readers.py", line 141, in __init__
  File "importlib_resources\readers.py", line 76, in __init__
FileNotFoundError: MultiplexedPath must contain at least one path

Ранее у меня было несколько ошибок ModuleNotFound, которые заставили меня вставить множество модулей в скрытые импорты .spec файлов

Я попытался указать дополнительные пути и использовать скрытые импорты с помощью следующей команды:

pyinstaller --paths=/path/to/file --hidden-import chromadb.db.impl.sqlite --hidden-import chromadb.api --hidden-import chromadb.config --hidden-import chromadb.api.client --hidden-import chromadb.migrations --hidden-import chromadb.migrations.embeddings_queue UX.py

Я также очистил свой .spec

Несмотря на это, я продолжаю сталкиваться с той же ошибкой. Я проверил, что все необходимые файлы находятся в указанных директориях.

У кого-нибудь есть предложения о том, как решить эту проблему?

Спасибо за вашу помощь!

мой файл spec:

# -*- mode: python ; coding: utf-8 -*-

a = Analysis(
    ['UX.py'],
    pathex=['C:\\Users\\xx\\HL-Documents\\python modif\\OLLAMA rag v2'],
    binaries=[],
    datas=[],
    hiddenimports=['chromadb.db.impl.sqlite', 'chromadb.api', 'chromadb.config', 'chromadb.api.client', 'chromadb.migrations', 'chromadb.migrations.embeddings_queue', 'importlib_resources'],
    hookspath=["\hooks"],
    hooksconfig={},
    runtime_hooks=[],
    excludes=[],
    noarchive=False,
    optimize=0,
)
pyz = PYZ(a.pure)

exe = EXE(
    pyz,
    a.scripts,
    a.binaries,
    a.datas,
    [],
    name="UX",
    debug=False,
    bootloader_ignore_signals=False,
    strip=False,
    upx=True,
    upx_exclude=[],
    runtime_tmpdir=None,
    console=True,
    disable_windowed_traceback=False,
    argv_emulation=False,
    target_arch=None,
    codesign_identity=None,
    entitlements_file=None,
)

некоторые из моих импортов

import customtkinter as ctk
from tkinter import filedialog
import time
from time import sleep
import os
import shutil
from files import RAG_modif_pour_UX
from pydantic.deprecated import decorator
from chromadb.telemetry.product import posthog
from chromadb.api import segment
from langchain_ollama import OllamaEmbeddings
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_chroma import Chroma
from langchain_community.document_loaders import UnstructuredPDFLoader
from langchain_community.document_loaders import OnlinePDFLoader
from langchain.prompts import ChatPromptTemplate, PromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_ollama import ChatOllama
from langchain_core.runnables import RunnablePassthrough
import os
from langchain.schema.document import Document
import shutil
from chromadb.utils.embedding_functions.onnx_mini_lm_l6_v2 import ONNXMiniLM_L6_V2
import subprocess
import sys

Ответ или решение

Ошибка FileNotFoundError: MultiplexedPath must contain at least one path, возникающая при использовании PyInstaller для упаковки вашего Python-скрипта в исполняемый файл, указывает на то, что PyInstaller не может найти необходимые ресурсы в указанном пути. Давайте рассмотрим шаги, которые помогут вам решить данную проблему.

1. Анализ трассировки ошибки

Исходя из предоставленной трассировки ошибки, проблема возникает на этапе инициализации базы данных Chroma через модуль chromadb. Ошибка в конце говорит о том, что путь, передаваемый в метод, оказывается пустым. Это может происходить по нескольким причинам, включая:

  • Ошибки в файлах, которые должны быть включены в сборку.
  • Отсутствие указания необходимых модулей как "hidden imports".

2. Проверка пути и файлов

Убедитесь, что все файлы, на которые ссылаются ваши импорты и используемые библиотеки, доступны и правильно указаны в вашем проекте. В частности:

  • Проверьте, что файлы действительно присутствуют в указанной директории (C:\\Users\\xx\\HL-Documents\\python modif\\OLLAMA rag v2).
  • Убедитесь, что библиотеки, такие как chromadb, установлены и работают нормально в окружении, где вы запускаете PyInstaller.

3. Использование правильных параметров командной строки

Ваши команды для запуска PyInstaller могут требовать корректировок. Вместо использования параметров, подобных --paths и --hidden-import, попробуйте следующее:

pyinstaller UX.spec

Если хотите указать дополнительные пути и скрытые импорты, убедитесь, что они правильно добавлены в файл спецификации, а не указаны в командной строке.

4. Исправление файла спецификации (.spec)

Убедитесь, что ваш файл спецификации настроен правильно. Вы можете попробовать следующее:

  • Добавьте необходимые пути в pathex.
  • Убедитесь, что скрытые импорты включены и записаны корректно. Вот пример возможности изменения:
hiddenimports=[
    'chromadb.db.impl.sqlite', 
    'chromadb.api', 
    'chromadb.config', 
    'chromadb.api.client', 
    'chromadb.migrations', 
    'importlib_resources',
    # Добавьте другие модули, которые могут потребоваться
],
  • Проверьте наличие модуля importlib_resources в системе, так как это новый механизм импорта ресурсов для пакетов.

5. Проверка и очистка кэша PyInstaller

Иногда PyInstaller может использовать кэшированные данные, которые вызывают проблемы. Попробуйте очистить директорию сборки и кэш:

pyinstaller --clean UX.spec

6. Дополнительные отладочные выводы

Добавьте отладочный вывод в код, чтобы понять, какой именно путь передается в момент инициализации. Это может помочь идентифицировать, что именно не так с извлекаемыми путями.

Заключение

Несмотря на то что ошибка FileNotFoundError: MultiplexedPath must contain at least one path может возникать по нескольким причинам, следуя проверенному алгоритму, описанному выше, вы можете устранить большинство распространенных проблем, связанных с упаковкой Python-скриптов в исполняемые файлы с помощью PyInstaller. Если проблемы продолжаются, рассмотрите возможность поиска альтернативных подходов к упаковке, таких как cx_Freeze или py2exe, которые могут лучше соответствовать вашим требованиям.

Оцените материал
Добавить комментарий

Капча загружается...