python程序打包问题总结

本文分享了作者在将Python程序打包成可执行文件过程中遇到的问题及解决方案,包括在Mac和Windows平台下使用不同的打包工具(如pyinstaller、py2app、py2exe),并解决了权限、依赖库等常见问题。

python程序打包

前言

平时自已会写一些python程序,在淘宝上挂了一个youtube视频下载的程序,真的有人在买,把打包的程序发送给用户时发现了一些问题。这里总结一下。
大家可以在我的淘宝店看到我出售的那个程序:
https://item.taobao.com/item.htm?spm=a1z38n.10677092.0.0.59a21deb92Wawz&id=562803654585

商品在淘宝违规已被下架删除,这里没有办法浏览了,大家可以去我的商店看看别的出售商品

https://fengmm521.taobao.com

一开始只是打算写一个命令行下的视频下载工具,出售给会用命令行的兄弟们,但实际过程中的几个买家都是一点程序不会写的用户。于是用了一个通宵时间给我的命令行工具写了一个wx的界面,总的来说,现在这个程序还像点样子。

在用户使用过程中,因为部分用户访问外网的工具不理想,网络环境会不稳定,如果视频下载到一半时断网了,再连上来我这个程序就假死了,又花了一天时间把断网后网络恢复时,程序会接着之前下载一半的地方接着下载的功能加上去,同时还加了一个当前已下载的文件大小显示加上去。现在程序基本稳定了,除了没有下载剩余还有多少没有提示外,界面丑点,基本上在功能上没有什么问题了。但最近这两天有部分用户是mac系统用户,mac系统的安全性作的比较好,我的程序运行时会报一些权限错误。下边是gui程序打包过程中遇到的坑。希望对后来人有帮助。

MAC系统

最开始,mac系统下使用的是pyinstaller打包的app.在自已开发用的电脑上运行是完全没有问题的。但在用户的电脑上会出现程序没有写文件的权限。第一个用户远程在用电脑上安装了brew,pip,ffmpeg和我使用的一些其他库之后,用户的程序才正常工作。

用pyinstaller来打包app,这个工具打包的app还是比较好用的,安装方法

pip install pyinstaller --user

使用方法

pyinstaller -w testproject.py
#-w参数是生成app
#-F是生成一个单一的可执行文件

不知道是不是因为使用的是pyinstaller打包的app原因,所以今天晚上就试了一下py2app这个打包工具。
网上找了一个教程看了一下:
https://www.jianshu.com/p/afb6b2b97ce9

使用py2app过程中遇到了两个问题,

1.py2applet命令不存在

这个工具是用来生成py2app的setup.py文件,其实这个工具是在

/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/bin/py2applet

可以有两种方法设置这个工具,一种是使用ln -s的软链接到用户的/usr/local/bin目录下,还有一种是给工具所在的这个bin目录设置到环境变里。我用的是设置环境变量的方法,因为这个目录下还有几个工具,怕以后别的地方会用到

2.Operation not permitted错误

py2applet --make-setup test.py

生成了setup.py文件后,再使用

python setup.py py2app

命令行程序打包时,发现出了一个Operation not permitted错误。网上找了很多资料,说是苹果系统OS X EI Capitan (10.11.2)版本之后增加了系统文件完整性功能SIP。
网上看了有三种处理方法,

1.使用brew install python安装一个新的python2

使用brew install python后会安装一个python2到

/usr/local/bin/python2

的软链接程序,实际的安装位置在

/usr/local/Cellar/python/2.7.14_3/Frameworks/Python.framework/Versions/2.7/bin/python2.7

感现在苹果的python实际上是有三个版本,
一个是mac系统自然的一个,目前的版本是2.7.10
第二个是mac系统下安装的,python3,我的这个python3应该是我自已安装的
第三个是刚刚用brew安装的python2

这三个python在使用过程中其实不会冲突,用mac自代的2.7.10就用python,用咱刚刚安装的2.1.14用在命令行中用python2,如果要用到一些不支持python2的,可以在命令行里使用python3

2.使用上边py2app例子中的virtualenv环境

使用这个环境比较麻烦,几乎要重新安装所有的pip安装的第三方库,因为virtualenv的环境是一个独立的python环境。
virtualenv的用法:

#创建项目目录
mkdir projectdir

#进入项目目录
cd projectdir

#生成virtualenv环境
virtualenv venv
#开始使用这个环境
. venv/bin/activate

停止使用venv环境时,输入deactivate就可以了

使用这个方法,如果你是开发大型项目,而且这个项目要开发很久,这个方法不错,如果只是自已一个人开发的小项目,用venv的话,所有的python第三方库都要用pip在venv里重安装一遍,会非常烦人

3.手动关闭mac系统的SIP

这个方法可能会对系统的稳定性造成不好的结果。苹果之所以加了SIP自然有加这个功能的道理,这个方法我不推荐使用,所在这里就不提了,想了解的话可以在网上找找看

我使用的ffmpeg这个库对下载的视频作音视频合成,而ffmpeg在使用brew安装后会用到三个第三方库。这要在打包好python的app后手动放到app里,没有研究怎么在setup.py中加上第三方库的方法,有人了解的话可以给我留言

Windows下打包python

windwos下用pyinstaller也是可以打包的,但打包的程序无法在win10上运行,目前不知道win7或者别的windows系统能不能运行

所以我在windows上用的打包工具是py2exe
这个工功也要用到setup.py文件

py2exe的使用方法:
可参考下边的文章
http://www.ttfde.org/archives/293.html

使用py2exe打包windows上的程序到没有多大问题。在win10和win7上都可以使用。只是在程序运行时会自动打开一个命令行窗口,别的都没有问题,而且python中的多线程和mac系统在语言上也没有区别

<think>首先,用户的问题是:“我想查找Python程序打包的方法或工具 请问Python程序打包的方法和工具”。这翻译成英文是:“I want to find methods or tools for packaging Python programs. What are the methods and tools for packaging Python programs?” 从系统指令中,我知道我需要: - 所有行内数学表达式使用$...$格式。但在这个上下文中,由于主题是关于Python打包,可能没有太多数学内容。我应该只在必要时使用。 - 独立公式使用$$...$$格式并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识,如[^1]。 - 回答结构清晰,逐步解决问题,保证真实可靠。 用户提供的引用是关于Python打包的: - 引用[1]:讨论Nuitka打包exe,包括普通打包、单文件打包等。 - 引用[2]:提到PyInstaller在Mac和Windows上的打包,包括反编译链接。 - 引用[3]:关于在Windows系统中打包Python程序的方法汇总。 - 引用[4]:详细描述PyInstaller工具的使用,包括参数如-w。 - 引用[5]:介绍打包命令,如pyi-makespec和pyinstaller。 用户说“上述引用仅供参考,并不是用户真正的需求”,所以我需要基于用户的问题来回答,而不是直接复制引用。用户的问题是询问Python程序打包的方法和工具,所以我应该总结这些信息。 关键工具和方法从引用中提取: - PyInstaller:被多次提到(引用[2],[4],[5]),支持跨平台(Mac和Windows),可以打包为单个文件或文件夹。 - Nuitka:在引用[1]中提到,用于打包exe。 - 其他:引用[3]提到需要确保程序无错误运行,处理依赖。 我应该结构化回答: 1. **介绍**:简要解释Python打包的原因和目的(如保护源码、脱离Python环境运行)。 2. **主要工具**:列出并描述流行的打包工具。 - PyInstaller:最常用,跨平台。 - Nuitka:另一种选择,编译为C代码。 - 其他工具如cx_Freeze、py2exe(只限Windows)。 3. **详细步骤**:以PyInstaller为例,说明如何使用。 - 安装:pip install pyinstaller - 基本命令:pyinstaller --onefile script.py 用于单文件打包。 - 参数:如-w 隐藏控制台窗口,--icon 设置图标。 4. **注意事项**:如确保依赖安装好、路径问题等。 5. **生成相关问题**:在最后添加相关问题部分。 确保使用中文回答。 添加引用标识:在回答中,当提到特定信息时,自然地添加引用。例如,当讨论PyInstaller时,可以引用[4]或[5]。 生成相关问题: - 类似于示例,添加“§§相关问题§§”部分,列出2-3个相关问题。 最终回答结构: - 开头:直接回答用户问题。 - 主体:逐步解释方法和工具。 - 结尾:相关问题。 现在,草拟回答内容: </think> ### Python程序打包的方法和工具指南 Python程序打包是将脚本转换为可执行文件(如.exe)的过程,目的是隐藏源码、保护知识产权,并让程序能在无Python环境的电脑上运行[^4]。以下是主流方法和工具的详细说明,帮助您逐步操作。打包前,请确保您的程序无错误运行,且所有依赖已安装(如通过pip安装所需库)[^3]。 #### 主要打包工具概述 Python打包工具分为几类,支持跨平台或特定系统: - **PyInstaller**:最常用的工具,支持Windows、macOS和Linux。可打包为单个文件(启动较慢)或文件夹,支持隐藏控制台窗口(GUI程序适用)[^2][^4][^5]。 - **Nuitka**:将Python代码编译为C/C++代码,然后生成exe文件。性能更高,支持单文件打包和资源文件处理[^1]。 - **其他工具**: - **cx_Freeze**:跨平台,适合简单打包。 - **py2exe**:仅限Windows,但功能有限[^4]。 #### 详细打包步骤(以PyInstaller为例) PyInstaller是最易上手的工具,以下步骤覆盖基本到高级场景: 1. **安装PyInstaller**: ```bash pip install pyinstaller ``` 确保您的环境已安装pywin32(Windows用户)或相应依赖[^4]。 2. **基本打包命令**: - 打包为单个文件夹(便于调试): ```bash pyinstaller your_script.py ``` 生成的文件在`dist/your_script`文件夹中。 - 打包为单个exe文件(便于分发): ```bash pyinstaller --onefile your_script.py ``` 这会生成一个独立的.exe文件,但启动时间较长。 3. **常用参数优化**: - 隐藏控制台窗口(适用于GUI程序): ```bash pyinstaller --onefile -w your_script.py ``` 添加`-w`参数避免显示DOS窗口[^4]。 - 设置exe图标和名称: ```bash pyinstaller --onefile --icon=your_icon.ico --name=YourApp your_script.py ``` 图标需为.ico格式[^5]。 - 包含资源文件(如图片、数据库): 使用`.spec`文件配置(见步骤4)。 4. **高级配置(使用.spec文件)**: 生成配置文件并自定义: ```bash pyi-makespec -F --icon demo.ico --name Demo your_script.py ``` 编辑生成的`Demo.spec`文件,添加资源路径: ```python a = Analysis( ['your_script.py'], datas=[('path/to/resource', 'resource_folder_in_exe')], # 添加资源文件 ... ) ``` 然后打包: ```bash pyinstaller Demo.spec ``` 这确保exe包含所有依赖文件[^5]。 #### 注意事项 - **路径问题**:打包后的程序建议放在英文路径下运行,避免编码错误。 - **安全性**:避免赋予exe管理员权限,以防代码注入攻击。 - **性能**:单文件exe启动慢,因为需解压依赖;文件夹形式启动更快。 - **跨平台**:PyInstaller在macOS和Windows均有效,但需分别打包。Nuitka编译后性能更优,但配置更复杂。 - **测试**:打包后务必在目标系统测试功能完整性[^3]。 如果需要Nuitka或其他工具详细指南,参考相关文档或[引用链接](#)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值