pyinstaller 打包流程大体说明(linux)

一、 在文件中配置好.spec,build.sh , start.sh, stop.sh 文件后,后面的打包过程就很简单了,

(1)其中.spec文件是打包的流程,与pyinstaller有关(可以参考pyinstaller的spec文件编写规范),它能够定义好需提取的模块,打包后的文件名等等相关信息。

(2)我们可以把启动命令写入到build.sh,包括pyinstaller ***.spec 或者如果没有.spec文件的时候,使用 pyinstaller -F ***.py命令,都可以定义在build.sh文件里面,也包括对打包后的文件执行什么操作,比如将某些配置文件拷贝到./dist文件夹下,其中./dist文件夹是pyinstaller自动创建的。执行build.sh,就是执行你的打包过程,一般我们也执行tar压缩命令,将start.sh,stop.sh文件和生成的服务文件打成tar包。

(3)打包完毕后,可以撰写启动脚本和停止脚本,最终使用start.sh启动,stop.sh停止。

(4)这个流程就是将python打包后工程化的一个主要流程。

二、执行流程及相关命令

1. 由于pyinstaller和环境相关,win环境和mac及linux环境打出来的包是不同的,一般我们建立的虚拟机或者连接的服务器都是linux的,所以我们需要在linux上打包,一般我的具体操作过程是在本地上将python文件都写好,然后上传到linux环境,可以使用命令

scp ./helloworld.py [email protected]://Users/helloworld/

使用scp命令即可上传

2. 在linux环境下进入到拷贝的目录,比如我刚才将文件拷贝到了/Users/helloworld/文件夹下,所以我就进入到这个文件夹下

cd /Users/helloworld/

3. 由于pyinstaller打包过程容易失败,所以一般都是新建一个虚拟环境进行打包,比如如果安好了conda环境,就可以使用conda建立虚拟环境,命令如下:

conda create -n helloworld python=3.6

4. 激活虚拟环境,然后再对这个虚拟环境进行模块安装

conda activate helloworld
pip install -r requirements.txt

第一行命令是激活虚拟环境,第二行命令是使用pip安装依赖包,其中requirements.txt是在本地虚拟环境生成的, 可以使用以下命令生成requirements.txt文件,在本地上生成该文件是为了在linux环境下重新配置比较方便,要不一个一个模块下载很麻烦。

pip freeze > requirements.txt

5. 到目前为止,所有的环境就已经配好了,就可以执行pyinstaller打包了,因为我把所有的命令都写在了build.sh文件下,所以使用以下命令就可以执行打包

sh ./build.sh

添加sh这个命令是因为有时候没有权限直接对sh操作,如果有权限,直接运行./build.sh就可以打包了

6. 打包生成的helloworld_server(这个名字可以自己起)就可以直接执行,这期间如果想要压缩,可以使用linux命令

tar cvzf ....

进行压缩,当然这个命令也可以写进build.sh文件里,然后找一个空文件夹,把helloworld_server拷贝进去,再看看能否执行,因为我们一般将start.sh, stop.sh文件和生成的server文件压缩成hello.tar.gz文件,所以一般是将hello.tar.gz文件移动到空文件夹下。

7.最后启动服务,看是否能够运行,运行成功即可。

三、总结

       其实在以上打包的流程中,看起来很容易,但是总是有一些莫名其妙的错误,比如在linux下重新配置虚拟环境的时候,就总会出现问题,pyinstaller与python模块有时候也会有冲突,所以要下载好对应的版本,比如tensorflow2.0需要用pyinstaller4进行打包,而其他的模块一般用pyinstaller3.6打包,不然在算法启动的时候也会出现问题。总之打包出现错误的概率还是很大的,要有耐心才能打包成功。

你可能感兴趣的:(pyinstaller 打包流程大体说明(linux))