openSuse 和 cx_Freeze 4.3.3 : ImportError: libwx_gtk2u_adv-suse.so.1: 没有这样的文件或目录

Posted

技术标签:

【中文标题】openSuse 和 cx_Freeze 4.3.3 : ImportError: libwx_gtk2u_adv-suse.so.1: 没有这样的文件或目录【英文标题】:openSuse and cx_Freeze 4.3.3 : ImportError: libwx_gtk2u_adv-suse.so.1: No such file or directory 【发布时间】:2017-05-18 13:59:53 【问题描述】:

我正在尝试在 openSuse 42.1 上使用 cx_Freeze 4.3.3 创建一个二进制文件(我使用 wxPython3.0),但是在一个空的openSuse系统上,我无法运行我的程序...

这是我的 setup.py 文件:

#!/usr/bin/python
# -*- coding: utf-8 -*-

import sys
from cx_Freeze import setup, Executable

path = sys.path
path += ["/usr/lib64"]

includes = []
excludes = ['PyQt4', 'PyQt5', 'Tkinter', 'FixTk', 'tcl', 'tk', '_tkinter', 'collections.abc']
packages = ['matplotlib.backends.backend_wxagg', 'numpy']

includefiles = ['./data/','./images/','./html/','./locale/','./logs/']

binpathincludes = []

if sys.platform == "linux2":
     binpathincludes += ["/usr/lib64"]
     binpathincludes += ["/usr/lib"]

base = 'Console'

options = "path": path,
            "includes": includes,
            "excludes": excludes,
            "packages": packages,
            "include_files": includefiles,
            "bin_path_includes": binpathincludes,
            "optimize": 0,
            "silent": True
            

executables = [
     Executable('MyProjetc.py', base=base)
]

setup(name='MyProject',
       version='1.0',
       description='My Project',
       executables=executables,
       options='build_exe': options
       )

但是当我尝试在空系统上运行我的二进制程序时,opensuse(没有 wxPython 安装在上面),我得到这个错误:

Traceback (most recent call last):
File "/usr/lib64/python2.7/site-packages/cx_Freeze/initscripts/Console.py", line 27, in <module>
File "JustConsum.py", line 4, in <module>
File "/usr/lib64/python2.7/site-packages/wx-3.0-gtk2/wx/__init__.py", line 45, in <module>
File "/usr/lib64/python2.7/site-packages/wx-3.0-gtk2/wx/_core.py", line 4, in <module>
File "ExtensionLoader_wx__core_.py", line 22, in <module>
File "ExtensionLoader_wx__core_.py", line 14, in __bootstrap__
ImportError: libwx_gtk2u_adv-suse.so.1: cannot open shared object file: No such file or directory

但是那个文件“libwx_gtk2u_adv-suse.so.1”是 确实在包含二进制文件的目录的根目录:

-rwxrwx--- 1 regis users  1918960 25 oct.   2015 libwx_gtk2u_adv-suse.so.1
-rwxrwx--- 1 regis users   575528 25 oct.   2015 libwx_gtk2u_aui-suse.so.1
-rwxrwx--- 1 regis users  5780640 25 oct.   2015 libwx_gtk2u_core-suse.so.1

知道发生了什么吗?

非常感谢

【问题讨论】:

【参考方案1】:

于是我在网上搜索,找到了“patchelf”命令。 由于我的二进制文件(使用 cx_Freeze 生成)与我的可执行文件位于同一目录中,因此我创建了脚本:

for i in *so*
do
     patchelf --set-rpath '.' $i
done

因为,我的独立应用程序可以在“空”的 openSuse 系统上启动...

注意:

此解决方案适用于 cx_Freeze 4.3.x,但不适用于 5.x 版本

我成功地在各种其他 linux 平台(Debian、Mint、Ubuntu、Mageia、Fedora、CentOS)上创建了独立应用程序(用于同一程序),没有任何问题。

只有 openSuse 需要这种操作,所以我的独立程序可以运行...我无法解释为什么。

也许这篇文章可以帮助其他人。

【讨论】:

以上是关于openSuse 和 cx_Freeze 4.3.3 : ImportError: libwx_gtk2u_adv-suse.so.1: 没有这样的文件或目录的主要内容,如果未能解决你的问题,请参考以下文章

使用 cx_freeze 4.3.1 冻结 h5py 2.4 时出错

cx_Freeze- ImportError:无法导入名称设置

cx_freeze 链接到 /opt/local 中的库,而不是它复制的库

cx_Freeze 将 Python 和 Pygame 文档编译为 .exe 文件时出现奇怪的错误

使用 cx_freeze 后不会出现 QGraphicsPixmapItem

Python cx_Freeze 错误“没有名为 'cx_Freeze.util' 的模块”