我試圖CX_Freeze Linux平臺的應用程序。 Windows MSI安裝程序可以很好地工作,但Linux對應部分並沒有按照我所需的方式運行。冷凍共享與cx_freeze對象在Linux上
當包裝是建立它完美地運行原來的系統上,但是,當移植到不同的系統(雖然相同的體系結構)它產生一個段錯誤。我做的第一件事是檢查圖書館,並且與libc,pthread和libdl有一些巨大的版本差異。所以,我決定把這些在建,像這樣:
if windows_build:
build_exe_options['packages'].append("win32net")
build_exe_options['packages'].append("win32security")
build_exe_options['packages'].append("win32con")
pywintypes_dll = 'pywintypes{0}{1}.dll'.format(*sys.version_info[0:2]) # e.g. pywintypes27.dll
build_exe_options['include_files'].append((os.path.join(GetSystemDirectory(), pywintypes_dll), pywintypes_dll))
else:
build_exe_options['packages'].append("subprocess")
build_exe_options['packages'].append("encodings")
arch_lib_path = ("/lib/%s-linux-gnu" % os.uname()[4])
shared_objects = ["libc.so.6", "libpthread.so.0", "libz.so.1", "libdl.so.2", "libutil.so.1", "libm.so.6", "libgcc_s.so.1", "ld-linux-x86-64.so.2"]
lib_paths = ["/lib", arch_lib_path, "/lib64"]
for so in shared_objects:
for lib in lib_paths:
lib_path = "%s/%s" % (lib, so)
if os.path.isfile(lib_path):
build_exe_options['include_files'].append((lib_path, so))
break
覈對原件cx_frozen斌似乎動態庫發揮有一部分後和攔截完美的呼籲。雖然現在我處於pthread分段錯誤的部分,因爲他嘗試使用系統libc而不是我的(使用ldd和gdb進行檢查)。
我的問題很簡單,這種方法我想是可怕的,因爲它沒有做遞歸depency解決。因此我的問題是「這樣做的更好方法是什麼?或者我應該在我的安裝程序中編寫遞歸依賴解決方案?」
而且爲了擊敗解決方案:「使用原生的Python,而不是」,我們得到了我們想要運行這個藏漢一些硬件設備(認爲2〜4U)的Linux(和Bash訪問)。當我們可以通過cx_freeze和運行librarys時,移植整個python(通過它的動態鏈接etcetc)看起來就像很多工作的方式。
我想說明我已閱讀[鏈接](http://hackerboss.com/how-to-distribute-commercial-python-applications/) – Stolas 2013-04-23 12:47:22