如何打包/分发Python应用程序

6 投票
1 回答
1292 浏览
提问于 2025-04-18 12:38

我花了无数个小时试图理解这个问题,但遗憾的是我还没有找到答案。或者说,我觉得我还没有找到。

首先,我得说我是一个Java开发者。最近我才开始接触Python,构建过程对我来说有点……奇怪。

在我看来,我写一个应用程序,然后编译它以便运行,最后把它打包成一个.jar文件,供其他人使用。可以是作为库,也可以是让最终用户执行并玩耍。(暂时不考虑像maven或gradle这样的工具……)

我用Python写了一个小的命令行工具,包含大约6个文件,我想把它分发出去。根据我找到的信息,我应该写一个setup.py,我也找了一些关于怎么做的指南,但……说实话,我甚至不太确定那到底是干嘛的。我可以把我的源代码打包成一个tar.gz文件,里面还有一些其他的元数据,或者它会生成一些我不知道该怎么处理的奇怪文件。

然后我发现了PyInstaller,它很好地把所有东西打包成一个可执行文件。然而,我在尝试创建一个Debian包时遇到了一些问题,这让我重新思考并质疑,似乎在Python中没有什么工具(不使用外部工具)可以让我把我的应用程序打包成一个可以运行的单一文件。

这让我很困惑。我的意思是……在有了像PyInstaller和P2Exe这样的工具之前,人们是怎么分发他们的应用程序的?难道我需要写一个C语言的应用程序,把Python代码以某种方式包含进去,然后编译它吗?抱歉如果这个问题听起来很傻,但我真的在问。我在网上查了很多资料,花了很多时间,但仍然没有找到令人满意的答案,所以希望这里有人能帮我解决这个问题!谢谢。

1 个回答

1

如果你把你的Python代码打包成pip可以用的格式,你可以加入一些可执行的脚本来启动你的程序。我不知道五年前这个问题是什么情况,但现在pip和Python几乎是紧密结合在一起的,甚至有一个标准库模块可以在pip缺失的情况下帮你安装它:https://docs.python.org/3/library/ensurepip.html

如果你想为其他的包管理工具打包应用,比如Anaconda或者各种Linux发行版的包管理器,或者作为Windows安装程序,那情况就不一样了。显然,你需要为每个你想支持的包管理器或安装方式创建一个单独的包。

撰写回答