gpt4 book ai didi

python - cx_freeze 将我的共享对象库嵌入到二进制可执行文件中?

转载 作者:行者123 更新时间:2023-11-28 17:47:35 34 4
gpt4 key购买 nike

我可以使用 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]
)

最佳答案

我不确定为什么顶级目录 (getcwd) 是可执行文件的名称。

无论如何,我能够使用 os.path.exists 在我的代码中添加一些东西,并重新调整发送到 LoadLibrary 的值。

Thomas,感谢您花时间回复。

这本来就是别人的工具,我不得不支持。发生的事情是 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

这样,如果完整路径存在,它就可以工作,如果它不只是使用应该从 LD_LIBRARY_PATH 环境设置中获取的 LibName。

关于python - cx_freeze 将我的共享对象库嵌入到二进制可执行文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15777837/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com