前言
最近,在
Centos 7
虚拟机上面搭建了
Python3
环境、以及虚拟环境,以后需要在此环境中进行打包。
今天尝试安装
Pyinstaller
,并进行打包,安装过程非常顺利,执行以下命令即可。
pip3 install pyinstaller
准备测试文件
demo.py
,内容如下:
print("hello python")
但使用以下命令打包测试代码时会报错
pyinstaller -F demo.py
现将具体处理过程记录下来。
报错提示信息
执行打包命令后,报错信息如下:
...前面内容已经省略
* 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)
* (demo) [root@group demo]# This would mean your Python installation doesn't come with proper library fi les.
> This usually happens by missing development package, or unsuitable build par ameters of Python installation.
提示的信息大致说,缺少相关动态库
1、如果在
Debian/Ubuntu
环境中,你需要安装 Python 开发包
- apt get 安装
python3 dev
- apt get 安装
python dev
2、如果你是自己构建 Python ,请使用
“-enable shared”
重新构建 Python(或者在 Darwin 上使用
--enable framework
)
3、这意味着你的 Python 安装没有正确的库文件,这通常是由于缺少开发包,或者 Python 安装的构建参数不合适而导致的。
第一处报错处理
1、进入 Python 编译目录
cd Python-3.7.2/
2、带上参数
--enable-shared
重新编译
./configure --prefix=/usr/local/python3 --enable-shared --with-ssl
3、重新安装
make && make install
编译、安装过程非常顺利,很开心,下面检验一下 Python 是否能正常使用
4、运行
python3
,出现一个新的报错 -
error while loading shared libraries
python3
具体报错信息如下:
python3 :error while loading shared libraries :libpython3.7m.so.1.0:cannot open shared object file:No such file or directory.
第二处报错处理
分析报错信息,运行时链接动态库失败导致的报错
1、查看编译时安装
libpython3.7m.so.1.0
动态库的目录
find /usr -name 'libpython3.6m.so.1.0'
输出如下信息
/usr/local/python3/lib/libpython3.7m.so.1.0
则安装该动态库的目录为
/usr/local/python3/lib
2、使用链接器查看可搜索范围,并没有发现
libpython3.7m.so.1.0
ldconfig -v | grep python3
执行以下命令也可发现,这个库的指向为
not found
ldd $(which python3)
根据相关文献可知,链接器默认的动态库搜索范围包括
/lib
、
/usr/lib
以及
/etc/ld.so.conf
配置文件中包含的目录,这是我们处理问题的突破口。
3、手动将该库的安装目录 -
/usr/local/python3/lib/
, 添加到
/etc/ld.so.conf
中
vi /etc/ld.so.conf
编辑后的内容如下:
include ld.so.conf.d/*.conf
/opt/openssl1.0.2r/lib
/usr/local/python3/lib
4、执行
ldconfig
刷新缓存
ldconfig
5、检验命令
python3
,可正常使用
python3
6、再次使用
pyinstaller
打包测试代码
pyinstaller -F demo.py
果然,打包成功,开心.png
... 以上打包提示信息已省略
20945 INFO: Building EXE from EXE-00.toc completed successfully.
7、进入当前目录下的
dist
目录中,执行刚刚生成的打包文件
demo
cd dist/
./demo
成功输出
hello python
,至此所有报错问题已全部处理,下面可开心愉快地对项目进行打包咯。
总结
- 之前我们编译的方式,没有加上
--enable-shared
参数,为静态编译
,而打包时又需要使用到一些动态库,所以我们调整为使用动态编译
的方式,重新编译了 Python3 环境,成功处理了第一处报错。- 编译后,运行
python3
命令时找不到我们安装的相关动态库,因为系统只会在默认的范围中寻找,我们手动将动态库的安装目录添加到/etc/ld.so.conf
文件中,成功处理了第二处报错。- 添加动态库安装目录后,记得刷新一下缓存。
- 环境的安装,往往会遇到一些坑,不过只要我们脚踏实地,认真记录好自己工作、学习中遇到的一些小问题,积累下来,将会变成一笔宝贵的财富。