Python中为什么Pyinstaller打包成app之后像素变低了?

如图,左边是加了 --windowed 参数,生成的 .app,右图是没加 --windowed 参数生成的可执行文档。

为什么清晰度变低了?


Python中为什么Pyinstaller打包成app之后像素变低了?
4 回复

可以自己改 app 里的 plist 支持高清


这个问题我遇到过,是PyInstaller打包时资源文件处理的问题。

核心原因是PyInstaller默认不会包含图片等资源文件,导致打包后的应用找不到原始的高清图片资源,可能使用了系统默认的低分辨率图标或缓存图片。

解决方案是在spec文件中明确指定要包含的资源文件。以下是完整的解决方案:

# 修改你的spec文件,比如your_script.spec
a = Analysis(
    ['your_script.py'],
    pathex=[],
    binaries=[],
    datas=[],  # 这里需要修改
    hiddenimports=[],
    hookspath=[],
    hooksconfig={},
    runtime_hooks=[],
    excludes=[],
    noarchive=False,
)

# 修改datas部分,添加你的图片资源
# 格式:(源路径, 目标路径)
a.datas += [
    ('path/to/your/image.png', 'path/in/bundle'),
    ('icons/high_res_icon.ico', 'icons'),
]

# 然后在代码中正确引用这些资源
import sys
import os

def resource_path(relative_path):
    """获取资源的绝对路径,兼容开发环境和打包后环境"""
    if hasattr(sys, '_MEIPASS'):
        # 打包后的路径
        base_path = sys._MEIPASS
    else:
        # 开发环境的路径
        base_path = os.path.abspath(".")
    
    return os.path.join(base_path, relative_path)

# 使用示例
icon_path = resource_path('icons/high_res_icon.ico')

如果你用的是命令行打包,可以这样:

pyinstaller --add-data "path/to/your/image.png:path/in/bundle" your_script.py

另外,确保你的图片本身是高分辨率的,并且检查代码中是否有硬编码的图片路径需要改为使用resource_path函数。

总结:在spec文件中正确配置资源文件路径。

往 info.plist 里加
<key>NSHighResolutionCapable</key>
<true/>

确实可以!感谢

回到顶部