我可以使用cx_freeze打包我的python工具,但无法加载我需要的库。由于某种原因,输出的可执行文件/二进制名称不断包含在路径中。
我收到以下错误:
OSError:/home/derekx/sbu/build/exe.linux-x86_64-2.7/secure_boot_utility/lib/libcrypto.so.1.0.0:无法打开共享对象文件:不是目录
该库被打包到/home/derekx/sbu/build/exe.linux-x86_64-2.7/lib/libcrypto.so.1.0.0
创建的二进制文件“secure_boot_utility”也在build / exe.linux86_64-2.7目录中。
我的输入脚本和setup.py位于/ home / derekx / sbu。
我使用“python setup.py build”打包工具/依赖项..
非常感谢任何帮助。我尝试了一些选项,但仍然会遇到同样的错误。
我的setup.py是:
import sys
from cx_Freeze import setup, Executable
sys.path.append('sbu_scripts/')
sys.path.append('lib/')
binincludes = ['libcrypto.so.1.0.0']
binpaths = ['/home/derekx/sbu/lib']
includefiles = [('lib/libcrypto.so.1.0.0','lib/libcrypto.so.1.0.0'),]
exe = Executable(
script="secure_boot_utility.py",
)
setup(
name = "SecureBoot",
version = "0.1",
description = "Test Secure Boot",
options = {"build_exe": {'copy_dependent_files':True, 'create_shared_zip':True, 'bin_includes':binincludes, 'bin_path_includes':binpaths, 'include_files':includefiles}},
executables = [exe]
)
答案 0 :(得分:2)
我不确定为什么顶级目录(getcwd)是可执行文件名。
无论如何,我能够使用os.path.exists在我的代码中添加一些内容,并重新调整发送给LoadLibrary的值。
谢谢,托马斯,花时间回应。
这本来是我必须支持的其他人的工具。 发生了什么是sys.path [0]用于获取当前工作目录以构建正在加载的库的完整路径。 我不确定为什么用cx_freeze创建的可执行文件总是在当前工作目录中嵌入可执行文件名。
我如何修复它,检查了构建的库的完整路径是否存在于os.path.exists中:
if os.path.exists(path_to_lib) is False:
path_to_lib = LibName
return path_to_lib
这样,如果存在完整路径,它就可以工作,如果它不只是使用LibName,它应该从LD_LIBRARY_PATH环境设置中选择它。