欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

python程序打包问题详情

程序员文章站 2022-04-11 21:11:13
python程序打包 前言 平时自已会写一些python程序,在淘宝上挂了一个youtube视频下载的程序,真的有人在买,把打包的程序发送给用户时发现了一些问题。这里总结一下。...

python程序打包

前言

平时自已会写一些python程序,在淘宝上挂了一个youtube视频下载的程序,真的有人在买,把打包的程序发送给用户时发现了一些问题。这里总结一下。

一开始只是打算写一个命令行下的视频下载工具,出售给会用命令行的兄弟们,但实际过程中的几个买家都是一点程序不会写的用户。于是用了一个通宵时间给我的命令行工具写了一个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这个打包工具。

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