将Python脚本打包成可执行文件
Posted 隔壁老梁
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将Python脚本打包成可执行文件相关的知识,希望对你有一定的参考价值。
安装PyInstaller
对于那些网络比较稳定,能够流畅使用pip源地址的用户,直接下面的命令就可以搞定:
pip install pyinstaller
通常我们会下载源码包,然后进入包目录,执行下面的命令(需要安装setuptools):
python setup.py install
对于其他安装选项,请参阅手册和PIP用户指南。
安装当前开发版本使用:
pip install https://github.com/pyinstaller/pyinstaller/archive/develop.tar.gz
安装完后,检查安装成功与否:
pyinstaller --version
安装成功后,就可以使用下面的命令了:
pyinstaller
: 打包可执行文件的主要命令,详细用法下面会介绍。pyi-archive_viewer
: 查看可执行包里面的文件列表。pyi-bindepend
: 查看可执行文件依赖的动态库(.so或.dll文件)pyi-...
: 等等。
在执行pyInstaller
命令的时候,会在和脚本相同目录下,生成一个.spec
文件,该文件会告诉pyinstaller如何处理你的所有脚本,同时包含了命令选项。一般我们不用去理会这个文件,若需要打包数据文件,或者给打包的二进制增加一些Python的运行时选项时...一些高级打包选项时,需要手动编辑.spec
文件。可以使用:
pyi-makespec options script [script ...]
使用PyInstaller
pyinstaller
的语法:
pyinstaller [options] script [script ...] | specfile
最简单的用法,在和myscript.py同目录下执行命令:
pyinstaller mycript.py
然后会看到新增加了两个目录build和dist,dist下面的文件就是可以发布的可执行文件,对于上面的命令你会发现dist目录下面有一堆文件,各种都动态库文件和myscrip可执行文件。有时这样感觉比较麻烦,需要打包dist下面的所有东西才能发布,万一丢掉一个动态库就无法运行了,好在pyInstaller支持单文件模式,只需要执行:
pyinstaller -F mycript.py
你会发现dist下面只有一个可执行文件,这个单文件就可以发布了,可以运行在你正在使用的操作系统类似的系统的下面。
报错:
如果python不是默认安装路径,可能会找不到相应的库文件:
Traceback (most recent call last): File "/xs/app/python3.5/bin/pyinstaller", line 11, in <module> sys.exit(run()) File "/xs/app/python3.5/lib/python3.5/site-packages/PyInstaller/__main__.py", line 94, in run run_build(pyi_config, spec_file, **vars(args)) File "/xs/app/python3.5/lib/python3.5/site-packages/PyInstaller/__main__.py", line 46, in run_build PyInstaller.building.build_main.main(pyi_config, spec_file, **kwargs) File "/xs/app/python3.5/lib/python3.5/site-packages/PyInstaller/building/build_main.py", line 791, in main build(specfile, kw.get(‘distpath‘), kw.get(‘workpath‘), kw.get(‘clean_build‘)) File "/xs/app/python3.5/lib/python3.5/site-packages/PyInstaller/building/build_main.py", line 737, in build exec(text, spec_namespace) File "<string>", line 16, in <module> File "/xs/app/python3.5/lib/python3.5/site-packages/PyInstaller/building/build_main.py", line 213, in __init__ self.__postinit__() File "/xs/app/python3.5/lib/python3.5/site-packages/PyInstaller/building/datastruct.py", line 161, in __postinit__ self.assemble() File "/xs/app/python3.5/lib/python3.5/site-packages/PyInstaller/building/build_main.py", line 545, in assemble self._check_python_library(self.binaries) File "/xs/app/python3.5/lib/python3.5/site-packages/PyInstaller/building/build_main.py", line 629, in _check_python_library raise IOError(msg) OSError: Python library not found: libpython3.5mu.so.1.0, libpython3.5.so.1.0, libpython3.5m.so.1.0 This would mean your Python installation doesn‘t come with proper library files. This usually happens by missing development package, or unsuitable build parameters of Python installation. * On Debian/Ubuntu, you would need to install Python development packages * apt-get install python3-dev * apt-get install python-dev * If you‘re building Python by yourself, please rebuild your Python with `--enable-shared` (or, `--enable-framework` on Darwin)
解决方法:
1.编译/etc/ld.so.conf,添加: /usr/local/lib64 /usr/local/lib 2.ldconfig 3.重新pyinstaller文件即可
以上是关于将Python脚本打包成可执行文件的主要内容,如果未能解决你的问题,请参考以下文章