对于iOS开发不要随便拆卸系统自带的Python,因为有很多 library 还是使用 Python2.7。
一、python3和pip3、pyqt5安装
1 安装Xcode
-
App Store 搜索Xcode 并安装
-
安装 Xcode command line tool
xcode-select --install
2 安装套件管理工具 Homebrew
- 安装 Homebrew
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
- 查看是否安装成功
brew doctor
3 安装Python3
brew install python3
4 确认安装
- 系统自带的python2.7,目录为/usr/bin/python
which python
- brew安装的python3.4,目录为/usr/local/bin/python3
which python3
5 检测安装成功
- 系统自带的
python -V
- brew安装的
python3 -V
6 安装pip
- 6.1 系统自带的python没有pip,只有easy_install
系统的python安装pip,系统的python安装pip需要root权限
sudo easy_install pip
- 6.2 Python3 安装pip
brew install python3 or brew reinstall python3
如果安装失败,使用下面的方式安装:
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python3 get-pip.py
- 6.3 使用pip
// 系统自带的
pip --version
//brew安装的
pip3 --version
7 安装sip
//PyQt5对sip有依赖,需要先安装
pip3 install sip
8 安装PyQt5
pip3 install PyQt5
9 mac下需要额外安装qadesigner,两条命令
brew install qt
brew install qt-creator
10安装过程的异常处理
- 如果出现link error
Error: The brew link step did not complete successfully...
可以使用如下命令解决,哪个文件夹不对就处理哪个
sudo chown -R "$USER":admin /usr/local
- 如果出现sudo权限不足:permission denied,可以参考下面的链接
https://www.jianshu.com/p/5c4518584fa7
11qt设计器.ui文件转化为.py文件
pyuic5 -o mainwindow.py mainwindow.ui
二、使用pyinstaller打包
几种不同的打包工具都试用了下,pyinstaller应该是最好用的,主要是一直有人维护。
然后在 terminal 中依次键入,:
pyinstaller --windowed --onefile --clean --noconfirm main.py
pyinstaller --clean --noconfirm --windowed --onefile main.spec
其中,如果要自行设计 Mac 系统下的图标的话,那么可以替换第 1 条指令为:
pyinstaller --windowed --onefile --icon=sat_tool_icon.icns --clean --noconfirm main.py
其中图片转换地址为 https://iconverticons.com/online/
可见第一部是生成打包规则文件。
常见问题
打包是时候常常有外部数据源的需求,可以参考如下链接:
解决办法:https://www.xncoding.com/2015/09/07/python/pyinstaller.html
对于mac下单pyqt打包,还会出现精度变低的问题,解决方法:
- 方法一:
在打包出的app里面的info.plist里面添加:
<key>NSHighResolutionCapable</key>
<true/>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
- 方法二:
修改上面生成的spec的规则文件:
info_plist = {
"NSHighResolutionCapable": True,
"NSPrincipalClass":'NSApplication'
}
app = BUNDLE(exe,
name='reminder_dj.app',
info_plist=info_plist,
...
网友评论