Получение winerror 3 filenotfounderror в basicsr \\ archs после создания exe-файла с помощью pyinstaller в python

Я использую BasicSR в одном из настольных приложений. и он работает и работает нормально на PyCharm.

Но после преобразования его в EXE-файл с помощью pyinstaller я получаю ошибку ниже.

Думаю, это может быть os.scandir, но как я могу это решить, не знаю ..

пожалуйста, помогите мне решить эту проблему, так как я уже потратил много времени ..

      Traceback (most recent call last):
File "yogeshbhaiDesktop.py", line 7, in
File "", line 991, in _find_and_load
File "", line 975, in _find_and_load_unlocked
File "", line 671, in load_unlocked
File "PyInstaller\loader\pyimod03_importers.py", line 546, in exec_module
File "basicsr_init.py", line 3, in
File "", line 991, in _find_and_load
File "", line 975, in find_and_load_unlocked
File "", line 671, in load_unlocked
File "PyInstaller\loader\pyimod03_importers.py", line 546, in exec_module
File "basicsr\archs_init.py", line 14, in
File "basicsr\archs_init.py", line 14, in
File "basicsr\utils\misc.py", line 74, in _scandir
FileNotFoundError: [WinError 3] The system cannot find the path specified: 'C:\Users\gbd\AppData\Local\Temp\_MEI45162\basicsr\archs'

.spec файл:

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


block_cipher = None


a = Analysis(['yogeshbhaiDesktop.py'],
             pathex=['E:\\deployyPythonDesktop'],
             binaries=[],
             datas=[],
             hiddenimports=[],
             hookspath=['hook-basicsr.py'],
             hooksconfig={},
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)

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

файл hook-basicsr.py

      from PyInstaller.utils.hooks import collect_data_files
datas = collect_data_files("basicsr", includes=["archs/*_arch.py"])

Заранее спасибо..

1 ответ

Я решил эту проблему, заменив содержимоеbasicsr/archs/__init__.pyсо следующим. И проделайте ту же операцию для тех, кто использует скандир в__init__.py.

      import importlib
from copy import deepcopy
from os import path as osp

from basicsr.utils import get_root_logger, scandir
from basicsr.utils.registry import ARCH_REGISTRY

__all__ = ['build_network']

# automatically scan and import arch modules for registry
# scan all the files under the 'archs' folder and collect files ending with
# '_arch.py'
# arch_folder = osp.dirname(osp.abspath(__file__))
# arch_filenames = [osp.splitext(osp.basename(v))[0] for v in scandir(arch_folder) if v.endswith('_arch.py')]
# # import all the arch modules
# _arch_modules = [importlib.import_module(f'basicsr.archs.{file_name}') for file_name in arch_filenames]

from . import basicvsrpp_arch
from . import basicvsr_arch
from . import dfdnet_arch
from . import discriminator_arch
from . import duf_arch
from . import ecbsr_arch
from . import edsr_arch
from . import edvr_arch
from . import hifacegan_arch
from . import rcan_arch
from . import ridnet_arch
from . import rrdbnet_arch
from . import spynet_arch
from . import srresnet_arch
from . import srvgg_arch
from . import stylegan2_arch
from . import swinir_arch
from . import tof_arch
from . import vgg_arch

def build_network(opt):
    opt = deepcopy(opt)
    network_type = opt.pop('type')
    net = ARCH_REGISTRY.get(network_type)(**opt)
    logger = get_root_logger()
    logger.info(f'Network [{net.__class__.__name__}] is created.')
    return net

Другие вопросы по тегам