Нет модуля _cffi_ замораживания с cx_Freeze - PullRequest
0 голосов
/ 09 мая 2019

Я занимаюсь разработкой приложения PySide (Qt для Python) и хотел бы заморозить его с помощью cx_Freeze.

Когда я запускаю python setup.py build, используя мой файл установки ниже, он создает каталог сборки без ошибок, но затем, когда я запускаю сгенерированный файл .exe, я получаю сообщение об ошибке, показанное ниже:

from cx_Freeze import setup, Executable 

target = Executable(
    script="main_window.py",
    base = "Win32GUI",
    icon="images\\icon.ico"
    )

setup(name = "DemiurgoXMLgen" , 
    version = "0.1" , 
    description = "" ,
    options={'build_exe': {'include_files': ['images\\']}},
    executables = [target])

enter image description here

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

1 Ответ

0 голосов
/ 09 мая 2019

Я думаю, что решил эту проблему, изменив setup.py, как показано ниже:

import os.path

PYTHON_INSTALL_DIR = os.path.dirname(os.path.dirname(os.__file__))
build_exe_options = {"include_files" : [
    os.path.join(PYTHON_INSTALL_DIR, "DLLs", "libcrypto-1_1-x64.dll"),
    os.path.join(PYTHON_INSTALL_DIR, "DLLs", "libssl-1_1-x64.dll")]}
build_exe_options = {"packages": ['cffi', 'cryptography'], 'include_files': ['images\\', os.path.join(PYTHON_INSTALL_DIR, "DLLs", "libcrypto-1_1-x64.dll"),
    os.path.join(PYTHON_INSTALL_DIR, "DLLs", "libssl-1_1-x64.dll")]}

target = Executable(
    script="main_window.py",
    base = "Win32GUI",
    icon="images\\icon.ico"
    )

setup(name = "DemiurgoXMLgen" , 
    version = "0.1" , 
    description = "" ,
    options={'build_exe': build_exe_options},
    executables = [target])

и изменив в paramiko->ed25519key.py импорт:

из cryptography.hazmat.backends importdefault_backend

from cryptography.hazmat.backends import openssl as openssl_backend

По существу:

  1. явно указывает импорт cffi и cryptography в build_exe_options
  2. копирование dlls для libcrypto-1_1-x64.dl l и libssl-1_1-x64.dll
  3. явно указывают бэкэнд как openssl_backend вместо default_backend
...