【发布时间】:2018-02-12 12:26:34
【问题描述】:
我正在用最新版本的 Pynsist 打包一个 Python 2.7 程序。
我按照this 示例创建了一个installer.cfg 文件。
但是当我尝试打包我的应用程序运行时
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。
在 Google 上对此一无所知,但我不能使用其他程序进行打包(例如 py2exe、pyinstaller ecc...)。
感谢和抱歉英语不好
【问题讨论】:
-
如果你把 pygame 放在
packages=中,它会尝试从你的计算机上复制它。但那是适用于 Linux 的 pygame,它不能在 Windows 上运行。你可以通过使用 pygame 的轮子来解决这个问题——Pynsist 会自动选择一个 Windows 轮子。在此处查看 pygame 示例:github.com/takluyver/pynsist/tree/master/examples/pygame -
@ThomasK 我看了一下这个例子,但我不太明白......我必须下载 Windows 版本的 pygame 和......?为什么其他模块我没有这个问题?
-
如果您将 pygame 放在配置文件的
pypi_wheels=位(而不是packages=),Pynsist 会为您下载它。你不应该自己做任何事情。大多数包没有这个问题,因为它们只包含 Python 代码,在所有平台上都是相同的文件。 Pygame 已编译模块,必须针对正确的平台进行编译。 -
@ThomasK,谢谢!!!现在生成的.exe(在Linux下)应该可以在windows下工作了吗?
-
是的,就是这样!
标签: linux python-2.7 pygame packaging pynsist