py2exe非常棒,每當我想打包一個python程序在Windows系統上運行時,我都會使用它。py2exe的跨平臺替代
我的問題是,是否有一個等同的工具可以用來打包Windows上的程序,但我可以在Linux上運行?
py2exe非常棒,每當我想打包一個python程序在Windows系統上運行時,我都會使用它。py2exe的跨平臺替代
我的問題是,是否有一個等同的工具可以用來打包Windows上的程序,但我可以在Linux上運行?
好的,我已經完成了。這有點冒險,但對我的使用情況非常有用。
它的要點是使用ModuleFinder查找所有導入的模塊,過濾掉所有系統模塊,編譯它們並將其壓縮。
不幸的是我的這段代碼中充斥着沒有任何關係這個問題更多的併發症,所以我不能粘貼工作程序,只是一些片段:
zipfile = ZipFile(os.path.join(dest_dir, zip_name), 'w', ZIP_DEFLATED)
sys.path.insert(0, '.')
finder = ModuleFinder()
finder.run_script(source_name)
for name, mod in finder.modules.iteritems():
filename = mod.__file__
if filename is None:
continue
if "python" in filename.lower():
continue
subprocess.call('"%s" -OO -m py_compile "%s"' % (python_exe, filename))
zipfile.write(filename, dest_path)
這裏也是PyInstaller,它支持Linux,MacOS和Windows - 我還沒有使用它(所以我不知道你是否可以在windows上打包linux的東西,但看了一下manual它似乎是可能的。
編輯: 的FAQ國家明確規定,不能創建從Linux的一個窗口封裝,從Linux沒有MAC OS包沒有 - 沒有什麼關於從其他兩個來源創建Linux包,但它可能不工作。
EDIT2: google搜索了一下,我發現cx_freeze這也可能是值得一看之後。
有趣的想法,但我沒有設法得到任何工作。謝謝你的建議。 – xorsyst 2012-01-30 08:38:08
我真的懷疑你可以這樣做。
你可以做的僅僅是自己配置3個虛擬機,一個用於Windows,另一個用於MacOS,另一個用於Linux,你需要運行你的程序。
然後使用py2exe/py2app/pyinstaller的組合來爲每個平臺生成一個分配。你將有3個不同的pacakges,但其中每一個都會很好地打包並且不需要在客戶端機器上安裝任何東西。
你可以安全地假設python已經安裝在大多數linux系統上。 – ThiefMaster 2012-01-27 15:16:32
是的,但我仍然想要輕鬆打包所有相關的源文件,包括任何導入的模塊,而無需在目標linux系統上安裝任何東西。 – xorsyst 2012-01-27 15:55:55