【发布时间】:2019-06-25 21:56:53
【问题描述】:
好的,我开发了一个 PySide 桌面应用程序,我想使用 cx_Freeze 来分享它。我在打包 paramiko 库时遇到了一些问题,但我使用这个 workaround 解决了。
一切都在我的机器上运行,这意味着双击由 cx_Freeze 生成的 .exe 应用程序正在启动并正常运行。
当我在朋友的 PC 上测试该软件包时,我感到非常失望。
应用程序未启动并显示此错误:
File "C:\Users\frpegora\AppData\Local\Programs\Python\Python37\lib\site-packages\cx_Freeze\initscripts\__startup__.py", line 14, in run
File "C:\Users\frpegora\AppData\Local\Programs\Python\Python37\lib\site-packages\cx_Freeze\initscripts\Console.py", line 26, in run
File "main_window.py", line 13, in <module>
File "C:\Users\frpegora\Desktop\Projects\GUI\single_widget.py", line 13, in <module>
File "C:\Users\frpegora\Desktop\Projects\GUI\importer_server.py", line 14, in <module>
File "C:\Users\frpegora\AppData\Local\Programs\Python\Python37\lib\site-packages\paramiko\__init__.py", line 22, in <module>
File "C:\Users\frpegora\AppData\Local\Programs\Python\Python37\lib\site-packages\paramiko\transport.py", line 90, in <module>
File "C:\Users\frpegora\AppData\Local\Programs\Python\Python37\lib\site-packages\paramiko\ed25519key.py", line 20, in <module>
File "C:\Users\frpegora\AppData\Local\Programs\Python\Python37\lib\site-packages\cryptography\hazmat\backends\openssl\__init__.py", line 7, in <module>
File "C:\Users\frpegora\AppData\Local\Programs\Python\Python37\lib\site-packages\cryptography\hazmat\backends\openssl\backend.py", line 71, in <module>
File "C:\Users\frpegora\AppData\Local\Programs\Python\Python37\lib\site-packages\cryptography\hazmat\bindings\openssl\binding.py", line 195, in <module>
File "C:\Users\frpegora\AppData\Local\Programs\Python\Python37\lib\site-packages\cryptography\hazmat\bindings\openssl\binding.py", line 142, in init_static_locks
ImportError: DLL load failed: The specified module could not be found.
我以为已经解决的问题又回来了!
更准确地说,前段时间我在 cx_Freeze 的 setup.py 中使用此解决方法传递了 paramiko 所需的 DLL:
PYTHON_INSTALL_DIR = os.path.dirname(os.path.dirname(os.__file__))
build_exe_options = {"packages": ['cffi', 'cryptography'],
'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")]}
问题是,正如我从朋友的 PC 上发布的错误所示,程序正在我的 PC 路径上寻找那些 DLL!
您能提出不同的解决方案吗?我尝试了所有方法,包括:
- 手动传递 DLL
- 复制错误中显示的整个文件夹
这是我的 setup.py:
from cx_Freeze import setup, Executable
import os.path
PYTHON_INSTALL_DIR = os.path.dirname(os.path.dirname(os.__file__))
build_exe_options = {"packages": ['cffi', 'cryptography'], 'include_files': [ ('libssl-1_1-x64.dll', os.path.join('lib', 'libssl-1_1-x64.dll')),
('libcrypto-1_1-x64.dll', os.path.join('lib', 'libcrypto-1_1-x64.dll'))]}
target = Executable(
script="main_window.py",
base = "Win32GUI",
icon="images\\icon.ico"
)
setup(name = "AppGen" ,
version = "0.1" ,
description = "" ,
options={'build_exe': build_exe_options},
executables = [target])
【问题讨论】:
-
请考虑使用带有反引号 ` 的
code formatting而不是 bold 来强调包名称,例如 cx_Freeze 和 paramiko。
标签: python paramiko cx-freeze pyside2