问题
I am developing a PySide application (Qt for Python) and I would like to freeze it using cx_Freeze.
When I run python setup.py build
using my setup file below, it creates the build directory without errors, but then when I run the .exe file generated, I get the error message shown below:
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])
I think it has something to do with the Paramiko package I am using in my application. Has anyone encountered and solved this problem?
回答1:
I think I solved it by modifying setup.py
as below:
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])
and modifying in paramiko->ed25519key.py
the import:
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.backends import openssl as openssl_backend
Essentially:
- explicitly specify the import of
cffi
andcryptography
inbuild_exe_options
- copy the dlls for
libcrypto-1_1-x64.dl
l andlibssl-1_1-x64.dll
- explicitly specify the backend as
openssl_backend
instead ofdefault_backend
来源:https://stackoverflow.com/questions/56056191/no-module-cffi-freezing-with-cx-freeze