Как импортировать модули в древовидной структуре с помощью pyinstaller - PullRequest
0 голосов
/ 07 мая 2020

У меня есть файл main.py, который соответствует структуре каталогов, как показано ниже

Mypackage
├──src
|  ├──main.py
|  ├──main.spec
|  └──settings.py
└──data

main.py как показано ниже

import numpy as np
from src.settings import args

Мой main.spec файл, как показано ниже

a = Analysis(['main.py'],
             pathex=['../src'],
             binaries=[],
             datas=[],
             hiddenimports=['../src', '../src/settings.py', '../src/utils.py', '../src/paramtree_v2.py'],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=True)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)
exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,
          [],
          name='main',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          upx_exclude=[],
          runtime_tmpdir='.',
          console=True )

pyinstaller успешно создает автономный файл, однако при запуске приложения я получаю сообщение об ошибке ModuleNotFoundError: No module named 'src'. Как мне изменить main.spec, чтобы избежать этой ошибки?

Одним из способов решения этой проблемы является то, что в моем файле main.py я просто использую from settings import args, однако я хочу максимально сохранить структуру кода.

[EDIT]

Это работает после того, как я использую noarchive=False в файле main.spec

1 Ответ

0 голосов
/ 07 мая 2020

, поскольку main.py находится внутри sr c, pyinstaller обрабатывает папку sr c как root, поэтому связанная программа содержит файлы внутри sr c вместо sr c папку с файлами.

переместите ваши main.py и main.spec в папку модуля, и он должен работать (не забудьте также удалить все .. внутри SPE c)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...