背景
在macOS 上,用pyinstaller打包app,pyinstaller==5.1, python3.8, 因为代码都是在pycharm上,安装了虚拟环境,运行的。
问题1:
打包的时候直接在pycharm里面Terminal里运行
pyinstaller -F controller_ui.py
打包之后运行报以下错误。
[6633] Error loading Python lib ‘/Users/test/Documents/xx/controller_app/build/diags_controller_ui/Python’: xxcontroller_ui/Python’ (no such file), ‘/usr/local/lib/Python’ (no such file), ‘/usr/lib/Python’ (no such file)
分析:
明显是没有把python环境打包进去。百度说是python3.8与pyinstaller不兼容换了版本也没有用。参考别的说法,在macOS把我需要的python3.8配置到了全局变量里面去。
配置方法:
vim ~/.bash_profile 添加项目需要的环境,以下:
alias python=python3.8
PATH="/Library/Frameworks/Python.framework/Versions/3.8/bin/:${PATH}"
source ~/.bash_profile
以上的基本环境是与我的虚拟环境的python指向是同一个路径,都是这个python3.8,但是包是安装在虚拟路径下。解决了找不到python问题。
接着问题2:在上面基础上打包出来的exe,运行的时候报找不到包的错误
ModuleNotFoundError: No module named ‘PyQt5’
分析 :pycharm下虚拟环境下执行的pyinstaller,并不会把虚拟环境包包进入,需要手动配置.spec文件。
在运行了一次pyinstaller -F controller_ui.py,会生成一个controller_ui.spec配置文件 ,把虚拟环境的site-pakages配置进去。
修改:
SETUP_DIR = ‘/Users/usernamexxx/Documents/controller_app/’ #项目源码路径
pathex=[SETUP_DIR,’/Users/usernamexxx/Documents//lib/python3.8/site-packages’],
.spec源文件:
# -*- mode: python ; coding: utf-8 -*-
block_cipher = None
SETUP_DIR = '/Users/usernamexxx/Documents/controller_app/'
a = Analysis(
['diags_controller_ui.py'],
pathex=[SETUP_DIR,'/Users/usernamexxx/Documents/03env3/lib/python3.8/site-packages'],
binaries=[],
datas=[(SETUP_DIR + 'comm','comm'),(SETUP_DIR + 'loop_script_diags',SETUP_DIR + 'loop_script_diags'),(SETUP_DIR + 'utils','utils'),(SETUP_DIR + 'views','views')],
hiddenimports=[],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False,
)
pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)
exe = EXE(
pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
[],
name='diags_controller_ui',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=True,
disable_windowed_traceback=False,
argv_emulation=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None,
)
其他问题:
问题3
PermissionError: [Errno 13] Permission denied: ‘xxxx_controller_ui.pkg’
执行时加上sudo:
sudo pyinstaller -F controller_ui.py
问题4:not allowed: –onedir/–onefile
执行pyinstaller -F controller_ui.spec
option(s) not allowed:
–onedir/–onefile
makespec options not valid when a .spec file is given
解决:
新版的pyinstaller使用.spec文件打包时,不能加-F,用以下语句即可:
pyinstaller controller_ui.spec
参考 :
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/101591.html