Pyinstaller使用

Python 241 2017-09-23 14:46

Pyinstaller使用

人生苦短,我用python。

工作需要,使用Pyinstaller打包python程序为单文件exe。
看下面pyinstaller命令:

pyinstaller --noupx --paths C:/Users/yn/AppData/Local/Programs/Python/Python35/Lib/site-packages/PyQt5/Qt/bin --add-binary="UnRAR64.dll;." --add-data="11.png;." --add-data="logo.ico;." -F -w --icon=logo.ico test.py

首先看--paths C:/Users/yn/AppData/Local/Programs/Python/Python35/Lib/site-packages/PyQt5/Qt/bin,我用到了PyQt5的库,所以我把这个路径加进去,否则是找不到PyQt5的链接库的。

--noupx:是不适用upx,因为我使用了--upx-dir DIR之后,程序启动失败,说找不到相关qt的库(不知道什么原因),所以我这里去掉了upx。

--add-binary="UnRAR64.dll;.":因为我程序用到了动态链接库UnRAR64.dll,所以我把这个加进去exe里面。前面是UnRAR64.dll的当前路径,后面是加到exe之后的路径,我选择是当前目录,所以我程序里面直接使用了“UnRAR64.dll”,说明在当前路径下去找。

--add-data="logo.ico;.":程序里面用到了logo.ico来作为应用程序左上角的图标,所以我要把这个logo.ico加进去exe里面,否则打开程序之后,左上角不显示小图标。但是仅仅加这个选项是不够的,还要在程序代码里面加相关代码:

def resource_path(relative_path):
    """ Get absolute path to resource, works for dev and for PyInstaller """
    try:
        # PyInstaller creates a temp folder and stores path in _MEIPASS
        base_path = sys._MEIPASS
    except Exception:
        base_path = os.path.abspath(".")

    return os.path.join(base_path, relative_path)

...

self.setWindowIcon(QIcon(resource_path("logo.ico")))

这样之后才能正常显示出来。但我不明白为什么UnRAR64.dll不用程序里面加相关代码就可以直接使用?

-F:表示是单文件exe。

-w:表示有窗体显示,因为我用了PyQt5。

--icon=logo.ico:给这个应用程序添加图标,要不然就是python默认的图标。

更多详细内容,请去查看Pyinstaller文档和谷歌搜索相关内容。

Pyinstaller官方文档

文章评论