具有所有依赖项的 Python Windows 安装程序?

Posted

技术标签:

【中文标题】具有所有依赖项的 Python Windows 安装程序?【英文标题】:Python Windows Installer with all dependencies? 【发布时间】:2013-06-29 23:23:43 【问题描述】:

我在 PyPI 存储库中有一个包。我通过运行以下命令上传新版本(特别是“bdist_wininst”)来包含 Windows 安装程序:

python3 setup.py register sdist bdist_wininst upload

但是,当用户运行关联的 .exe 文件时,它不会安装 Python 3 本身。此外,即使安装了 Python 3,它也不会安装任何相关的依赖项。

创建一个 Windows 安装程序的最佳方法是什么?如果没有安装 Python 3 将安装它,以及我的包及其依赖项?

如果这不可能,那么创建一个将安装我的包及其依赖项的 Windows 安装程序的最佳方法是什么?假设已安装 Python 3?

我使用的是 Ubuntu 12.04。如果有任何帮助,这是我的 setup.py:

from distutils.core import setup

import codecs 
try: 
    codecs.lookup('mbcs') 
except LookupError: 
    ascii = codecs.lookup('ascii') 
    func = lambda name, enc=ascii: True: enc.get(name=='mbcs') 
    codecs.register(func) 

setup(
    name='SIGACTor',
    version='0.1.14dev',
    description=open('README.txt').read(),
    url='http://bitbucket.org/davidystephenson/sigactor',
    author='David Y. Stephenson',
    author_email='david@davidystephenson.com',
    packages=['sigactor'],
    license='Proprietary',
    long_description=open('README.txt').read(),
    install_requires=[
        'beautifulsoup4',
        'feedparser',
        'python-dateutil',
        'pyyaml'
    ],
)

【问题讨论】:

人们应该只回答一次:askubuntu.com/questions/315428/… --- askubuntu 将人们指向 ***,也许 this 问题应该成为回答问题的地方:) 抱歉 - 我不明白问题会被迁移。 您要制作 Windows 可执行文件吗?您是否尝试过使用 py2exePyInstaller ?这些包会让你创建一个 exe,允许没有安装 Python 的计算机运行你的程序。 @Gator_Python 我正在尝试为 python 模块创建安装程序。 @Daniel -- 这不正是pip 和 PyPI 的目的吗?我刚刚在我的 Windows 机器上使用 Python3 上的 pip install sigactor 从 PyPI 成功下载并安装了这个包(及其依赖项)。 pip 在 Windows 上随 Python 一起提供。 【参考方案1】:

您应该绝对试用 pynsist,它可以将 Python 与您的包捆绑在一起,并且基于完善的 NSIS 开源安装程序:

https://pypi.python.org/pypi/pynsist

Anaconda 团队再次提供了基于 conda 和 NSIS 的 Constructor:

https://github.com/conda/constructor

最后这种方法使用 WinPython 和最稳定的安装程序 InnoSetup:

http://cyrille.rossant.net/create-a-standalone-windows-installer-for-your-python-application/

但是如果你的包不是一个库而是一个应用程序,那么你可以将它与 Python 和所有依赖项捆绑(冻结),甚至使用 pyinstaller 压缩它:

http://www.pyinstaller.org

即使存在疯狂的互操作依赖关系,这也是我用于所有应用程序的方法!

奖励 - pyinstaller 的自动更新工具:

https://github.com/JMSwag/PyUpdater

【讨论】:

+1 用于 pyinstaller。 +0 没有提到赛通。 +0 Pyupdater,是世界上最令人困惑的更新系统。我一直试图让它更新 2 天......现在。我觉得 SAAS 是必经之路,而桌面应用程序可悲地是一门垂死的艺术。 我对创建自定义环境的工具有过不好的体验,尤其是从单个文件运行所有内容。它们使诊断问题变得不可能,并且不寻常的环境破坏了常见的假设和依赖它们的代码——这同样是无法诊断的。 IE。你可以发货,但祝你好运。 @ivan_pozdeev 那么您对发布 python 应用程序有什么建议? 最自然的选择是类似于 bdist_wininst 的 GUI,它会 pip 安装一堆***。 lfd.uci.edu/~gohlke/code/redist_wininst.py.html 看起来就是这样。 This is what I use for all of my apps even with crazy interop dependencies! - 你能解释一下或提供一些帮助或链接...我有 pypi 模块和二进制文件,当使用规范文件运行 pyinstaller 并启动我的 exe 时,它​​说没有 numpy .. . 所以,没有捆绑任何依赖。

以上是关于具有所有依赖项的 Python Windows 安装程序?的主要内容,如果未能解决你的问题,请参考以下文章

如何将具有依赖项的 python 脚本打包到 zip/tar 中?

安装具有依赖项的 Windows 服务

从具有依赖项的python程序创建可执行文件

如何使用 IntelliJ 制作具有所有依赖项的 jar 文件,也就是 Fat jar

GNU Makefile - 具有一个依赖项的多个目标的模式规则忽略所有目标,但第一个

g ++构建具有boost依赖项的c ++程序