【问题标题】:[ Python 2.7 ]Package program with Pynsist[ Python 2.7 ]用Pynsist打包程序
【发布时间】: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


【解决方案1】:

转帖作为答案,因为它有效:

如果您将 pygame 放入 packages=,它会尝试从您的计算机上复制它。但是在您的计算机上,这是适用于 Linux 的 pygame,它不能在 Windows 上运行。如果您将 pygame 放在配置文件的 pypi_wheels= 位中,Pynsist 将负责为您下载 Windows 版本。

查看 Pynsist 存储库中的 the pygame example

大多数包没有这个问题,因为它们只包含 Python 代码,在所有平台上都是相同的文件。 Pygame 已编译模块,必须针对正确的平台进行编译。

【讨论】:

    猜你喜欢
    • 2015-05-01
    • 1970-01-01
    • 2016-04-16
    • 2011-12-14
    • 2019-01-26
    • 2016-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多