Linux下Python3使用PyInstaller打包py脚本

为什么需要打包呢?直接运行单个的py文件它不香吗?起因在于我其中一台Linux机器连不上外网(或者说只能通过有限的方式上外网),连不上外网就用不了pip,用不了pip就安装不了一些相关的依赖包,缺少依赖包运行一些Python程序就会报错。而打包的方式可以把程序所需要的环境一块打包,这样的话,就算另外一台机器没有相关依赖包,甚至是没有Python环境,也照样可以运行打包后的可执行文件。

首先下载PyInstaller,我这儿下载的是PyInstaller-3.6.tar.gz版本,点击链接可以直接进行下载:https://files.pythonhosted.org/packages/3c/c9/c3f9bc64eb11eee6a824686deba6129884c8cbdf70e750661773b9865ee0/PyInstaller-3.6.tar.gz

然后进行解压,进入解压目录运行python3 setup.py install(前提是你已经安装好了Python3):

[root@master looking]# tar -zxvf PyInstaller-3.6.tar.gz
total 3492
-rw-r--r--.  1 root root   11226 Apr 21 09:42 batch_audio_recognition.py
-rw-r--r--.  1 root root    4022 Apr 21 09:33 Config.py
-rw-r--r--.  1 root root     511 Aug 16  2019 memorymonitor.py
-rw-r--r--.  1 root root     950 Aug 16  2019 memorymonitor.pyc
drwxr-xr-x.  2 root root      42 Aug 16  2019 __pycache__
drwxrwxr-x. 11 git  git     4096 Apr 21 11:15 PyInstaller-3.6
-rw-r--r--.  1 root root 3539593 Apr 21 10:16 PyInstaller-3.6.tar.gz
[root@master looking]# cd PyInstaller-3.6
[root@master PyInstaller-3.6]# python3 setup.py install

打包单个文件安装如下命令执行:

[root@master PyInstaller-3.6]# python3 pyinstaller.py -F batch_audio_recognition.py 
172 INFO: PyInstaller: 3.6
172 INFO: Python: 3.6.8
174 INFO: Platform: Linux-3.10.0-957.27.2.el7.x86_64-x86_64-with-centos-7.6.1810-Core
174 INFO: wrote /root/looking/PyInstaller-3.6/batch_audio_recognition/batch_audio_recognition.spec
177 INFO: UPX is not available.
179 INFO: Extending PYTHONPATH with paths
['/root/looking/PyInstaller-3.6',
 '/root/looking/PyInstaller-3.6/batch_audio_recognition']
179 INFO: checking Analysis
180 INFO: Building Analysis because Analysis-00.toc is non existent
180 INFO: Initializing module dependency graph...

就会生成一个以文件 batch_audio_recognition.py 的文件名为名字的目录,进入目录后可以看到有dist目录:

[root@master PyInstaller-3.6]# cd batch_audio_recognition
[root@master batch_audio_recognition]# ll
total 4
-rw-r--r--. 1 root root 917 Apr 21 11:15 batch_audio_recognition.spec
drwxr-xr-x. 3 root root  37 Apr 21 11:15 build
drwxr-xr-x. 2 root root  37 Apr 21 11:16 dist

进入dist目录以后,就可以看到打包好的可执行文件 batch_audio_recognition,当然,这个文件是没有带后缀的。如果想要在其他Linux环境下运行这个可执行文件,使用下面这种格式的命令(记得给文件添加可执行权限,不然可能会报下面这种错):

root@debian:~/looking# ./batch_audio_recognition
-bash: ./batch_audio_recognition: Permission denied

root@debian:~/looking# chmod 777 batch_audio_recognition
root@debian:~/looking# ./batch_audio_recognition 
{"code":0, "message":"success","requestId":73*****17}
73*****17 识别成功!

我后面发现,pip也可以用下面的方式使用代理访问外网来安装依赖包,还是我有点孤陋寡闻了,如果代理速度比较慢,也还可以使用“代理+镜像”的方式。 

root@debian:~# pip3 --proxy=http://***.**.**.***:8080 install tencentcloud-sdk-python
root@debian:~/looking# pip3 --proxy=http://***.**.**.***:8080 install -i https://pypi.tuna.tsinghua.edu.cn/simple tencentcloud-sdk-python

猜你喜欢

转载自blog.csdn.net/TomorrowAndTuture/article/details/105654244