2017-09-04 130 views
1

我打包了最新版本的Pynsist的Python 2.7程序。
我已經創建了一個installer.cfg文件,其後面的示例爲this
但是,當我嘗試打包我的應用程序運行[Python 2.7] Pynsist包裝程序

pynsist installer.cgf 

到它出現的應用程序文件夾

Copying Python installer to build directory 
PyLauncher MSI already in build directory. 
Copying packages into build directory... 
Traceback (most recent call last): 
    File "/usr/local/bin/pynsist", line 11, in <module> 
    sys.exit(main()) 
    File "/usr/local/lib/python2.7/dist-packages/nsist/__init__.py", line 540, in main 
    InstallerBuilder(**args).run(makensis=(not options.no_makensis)) 
    File "/usr/local/lib/python2.7/dist-packages/nsist/__init__.py", line 495, in run 
    self.prepare_packages() 
    File "/usr/local/lib/python2.7/dist-packages/nsist/__init__.py", line 381, in prepare_packages 
    py_version=self.py_version, exclude=self.exclude) 
    File "/usr/local/lib/python2.7/dist-packages/nsist/copymodules.py", line 224, in copy_modules 
    mc.copy(modname, target, exclude) 
    File "/usr/local/lib/python2.7/dist-packages/nsist/copymodules.py", line 195, in copy 
    check_package_for_ext_mods(path, self.py_version) 
    File "/usr/local/lib/python2.7/dist-packages/nsist/copymodules.py", line 41, in check_package_for_ext_mods 
    check_ext_mod(os.path.join(path, dirpath, filename), target_python) 
    File "/usr/local/lib/python2.7/dist-packages/nsist/copymodules.py", line 30, in check_ext_mod 
    raise ExtensionModuleMismatch(extensionmod_errmsg % ('Windows', path)) 
nsist.copymodules.ExtensionModuleMismatch: Found an extension module that will not be usable on Windows: 
/usr/lib/python2.7/dist-packages/pygame/rwobject.so 
Put Windows packages in pynsist_pkgs/ to avoid this. 

所以我覺得這個問題是pygame的。

谷歌在這裏沒有任何關於這一點,但我不能使用其他程序打包(例如py2exe,pyinstaller ecc ...)。
感謝和遺憾的英語不好

+1

如果你把pygame放在'packages ='中,它會嘗試從你的計算機上覆制它。但這是Linux的pygame,它不適用於Windows。你可以通過使用pygame的輪子來繞過這個 - Pynsist會自動選擇一個Windows輪子。看看這裏的pygame例子:https://github.com/takluyver/pynsist/tree/master/examples/pygame –

+0

@ThomasK我看了一下這個例子,但我不太明白......我必須下載Windows版本的pygame和....?爲什麼與其他模塊我沒有這個問題? –

+0

如果你把pygame放在配置文件的pypi_wheels =位中(而不是'packages ='),Pynsist會爲你下載它。你不需要自己做任何事情。大多數軟件包都沒有這個問題,因爲它們只包含Python代碼,這是所有平臺上的相同文件。 Pygame編譯了模塊,必須爲正確的平臺編譯模塊。 –

回答

1

轉貼作爲一個答案,因爲它的工作:

如果你把pygame的在packages=,它試圖將其從電腦複製。但在您的計算機上,這是Linux的pygame,這不適用於Windows。如果您將pygame放在配置文件的pypi_wheels=位中,Pynsist將負責爲您下載Windows版本。

查看Pynsist存儲庫中的the pygame example

大多數軟件包都沒有這個問題,因爲它們只包含Python代碼,這是所有平臺上的相同文件。 Pygame編譯了模塊,必須爲正確的平臺編譯模塊。