您的位置:首页 > 编程语言 > Python开发

python程序打包问题总结

2018-02-09 04:34 281 查看

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系统在语言上也没有区别
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: