Получение 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