openSuse and cx_Freeze 4.3.3 : ImportError: libwx_gtk2u_adv-suse.so.1: No such file or directory
openSuse and cx_Freeze 4.3.3 : ImportError: libwx_gtk2u_adv-suse.so.1: No such file or directory
我正在尝试在 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
知道发生了什么吗?
非常感谢
于是上网搜索,找到了“patchelf”命令。
由于我的二进制文件(使用 cx_Freeze 生成)与我的可执行文件位于同一目录中,因此我创建了脚本:
for i in *so*
do
patchelf --set-rpath '.' $i
done
因为,我的独立应用程序可以在 "empty" openSuse 系统上启动...
注:
此解决方案适用于 cx_Freeze 4.3.x,但不适用于 5.x 版本
我在各种其他 linux 平台(Debian、Mint、Ubuntu、Mageia、Fedora、CentOS)上成功创建了独立应用程序(针对同一程序)的问题。
只有openSuse需要这种操作,所以我的独立程序可以运行...我无法解释为什么。
这 post 可能对其他人有帮助。
我正在尝试在 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
知道发生了什么吗?
非常感谢
于是上网搜索,找到了“patchelf”命令。 由于我的二进制文件(使用 cx_Freeze 生成)与我的可执行文件位于同一目录中,因此我创建了脚本:
for i in *so*
do
patchelf --set-rpath '.' $i
done
因为,我的独立应用程序可以在 "empty" openSuse 系统上启动...
注:
此解决方案适用于 cx_Freeze 4.3.x,但不适用于 5.x 版本
我在各种其他 linux 平台(Debian、Mint、Ubuntu、Mageia、Fedora、CentOS)上成功创建了独立应用程序(针对同一程序)的问题。
只有openSuse需要这种操作,所以我的独立程序可以运行...我无法解释为什么。
这 post 可能对其他人有帮助。