python程序打包问题详情
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系统在语言上也没有区别
上一篇: HTML5- Canvas入门(二)
下一篇: 分享藏在手机里面最搞笑的图片给广大网友
推荐阅读
-
解决Python3 被PHP程序调用执行返回乱码的问题
-
利用setuptools打包python程序的方法步骤
-
Python程序员鲜为人知但你应该知道的17个问题
-
解决Ubuntu下使用linuxdeployqt打包Qt程序问题
-
python程序打包exe文件
-
python + pyinstaller 实现将python程序打包成exe文件直接运行
-
使用python搭建Django应用程序步骤及版本冲突问题解决
-
解决pycharm的Python console不能调试当前程序的问题
-
Python中用Ctrl+C终止多线程程序的问题解决
-
解决nohup执行python程序log文件写入不及时的问题