pyinstaller可以用来打包python应用程序,打包完的程序就可以在?有安装python解释器的机器上运行了。pyinstaller支持python 2.7和python 3.3 。可以在windows、mac os x和linux上使用,但是并不是跨平台的,而是说你要是希望打包成.exe文件,需要在windows系统上运行pyinstaller进行打包工作;打包成mac app,需要在mac os上使用。
安装
linux or mac
你可以从pypi上下载安装,当然也可以使用pip或者easy_install来安装。
1 2 3 pip install pyinstaller or easy_install pyinstaller 版本更新
1 2 3 pip install --upgrade pyinstaller or easy_install --upgrade pyinstaller windows
windows上运行pyinstaller还需要pywin32或者pypiwin32,其中pypiwin32在你安装pyinstaller的时候会自动安装。
使用pyinstaller
pyinstaller分析你的python程序,找到所有的依赖项。然后将依赖文件和python解释器放到一个文件夹下或者一个可执行文件中。
打包成一个文件夹
当使用pyinstaller打包的时候,默认生成一个文件夹,文件夹中包含所有依赖项,以及可执行文件。打包成文件夹的好处就是debug的时候可以清楚的看到依赖项有没有包含。另一个好处是更新的时候,只需要更新可执行文件就可以了。当然缺点也很明显,不方便,不易管理。
1 pyinstaller script.py 那么它是如何工作的呢?pyinstaller的引导程序是一个二进制可执行程序。当用户启动你的程序的时候,pyinstaller的引导程序开始运行,首先创建一个临时的python环境,然后通过python解释器导入程序的依赖,当然他们都在同一个文件夹下。
打包成一个文件
我们可以用onefile参数将所有文件打包到一个可执行文件中。
1 pyinstaller --onefile script.py 打包成一个文件相对于文件夹更容易管理。坏处运行相对比较慢。这个文件中包含了压缩的依赖文件拷贝(.so文件)。
当程序运行时,pyinstaller的引导程序会新建一个临时文件夹。然后解压程序的第三方依赖文件到临时文件夹中。这也是为什么一个可执行文件比文件夹中执行的时间要长的原因。剩下的就和上面的一样了。
spec 文件
当你执行下面命令
1 pyinstaller options..script.py pyinstaller首先建一个sepc(specification)文件:script.spec。这个文件的存放地址可以使用参数–specpath= 来定义,默认放在当前文件夹下。
spec文件的作用是什么呢?它会告诉pyinstaller如何处理你的py文件,它会将你的py文件名字和输入的大部分参数进行编码。pyinstaller通过执行spec文件中的内容来生成app,有点像makefile。正常使用中我们是不需要管spec文件的,但是下面几种情况需要修改spec文件:
需要打包资源文件
需要include一些pyinstaller不知道的run-time库
为可执行文件添加run-time 选项
多程序打包
可以通过下面命令生成spec文件
1 pyi-makespec options script.py [other scripts ...] 修改完spec文件,就可以通过下面命令来生成app文件了
1 pyinstaller options script.spec 当通过spec文件来生成app文件的时候只有下面几个参数是有用的:
–upx-dir=
–distpath=
–noconfirm=
–ascii
spec 文件解析
下面是一个spec文件的例子。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 block_cipher = none a = analysis([\\\'minimal.py\\\'], pathex=[\\\'/developer/pitests/minimal\\\'], binaries=none, datas=none, hiddenimports=[], hookspath=none, runtime_hooks=none, excludes=none, ciper=block_cipher) pyz = pyz(a.pure, a.zipped_data, cipher=block_cipher) exe = exe(pyz, ...) coll = collect(...) spec文件中主要包含4个class: analysis, pyz, exe和collect.
analysis以py文件为输入,它会分析py文件的依赖模块,并生成相应的信息
pyz是一个.pyz的压缩包,包含程序运行需要的所有依赖
exe根据上面两项生成
collect生成其他部分的输出文件夹,collect也可以没有
修改spec文件
我们上面说过有时候pyinstaller自动生成的spec文件并不能满足我们的需求,最常见的情况就是我们的程序依赖我们本地的一些数据文件,这个时候就需要我们自己去编辑spec文件来添加数据文件了。
上面的spec文件解析中analysis中的datas就是要添加到项目中的数据文件,我们可以编辑datas.
1 2 3 4 5 6 a = analysis( ... datas = [(\\\'you/source/file/path\\\',\\\'file_name_in_project\\\'), (\\\'source/file2\\\', \\\'file_name2\\\')] ... ) 可以认为datas是一个list,每个元素是一个二元组。元组的第一个元素是你本地文件索引,第二个元素是拷贝到项目中之后的文件名字。除了上面那种写法,也可以将其提出来。
1 2 3 4 5 6 7 added_files = [...] a = analysis( ... datas = added_files, ... ) 其他的二进制文件添加方法类似。
总结
最后简单来说,我们要通过pyinstaller生成可执行的文件主要下面两步。
1 pyinstaller [option] mypython.py option为空生成文件夹,选择onefile,生成一个文件。
如果项目有一些依赖的数据文件,上面生成的二进制文件是无法运行的,这个时候可以通过修改spec文件,让后再用pyinstaller运行spec文件。
1 pyinstaller [option] mypython.spec 当然也按上文那样先生成spec文件。
100g云服务器价格腾讯云服务器关机收费美国电商大促销即将开始 不过销量会比双11差多了选择哪个教程里没有第一次授权后就得马上下载代码包进行上传提交阿里和华为云服务器哪个便宜电脑硬盘排行榜_电脑硬盘排名2020年5月宏怎么取消_表格怎么取消宏功能图文步骤购买香港阿里云服务器需要什么