akshare使用pyinstaller打包exe无法正常运行
问题描述
前两天不是说写了一个摸鱼小工具吗,使用python写的,需要python环境才能运行,想着给它打包成exe就可以直接运行了。但是在打包成exe之后却无法正常运行,一运行就报错,报错信息如下:
Traceback (most recent call last):
File "\\192.168.31.122\devops\code\jupyter_notebook\tmp\stock_monitor.py", line 3, in <module>
import akshare as ak
File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
File "<frozen importlib._bootstrap>", line 1331, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 935, in _load_unlocked
File "PyInstaller\loader\pyimod02_importers.py", line 384, in exec_module
File "akshare\__init__.py", line 4485, in <module>
File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
File "<frozen importlib._bootstrap>", line 1331, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 935, in _load_unlocked
File "PyInstaller\loader\pyimod02_importers.py", line 384, in exec_module
File "akshare\stock_feature\stock_a_pe_and_pb.py", line 320, in <module>
File "py_mini_racer\py_mini_racer.py", line 178, in __init__
File "py_mini_racer\py_mini_racer.py", line 125, in _build_ext_handle
RuntimeError: Native library not available at C:\Users\admin\AppData\Local\Temp\_MEI128482\mini_racer.dll
经过一翻资料翻阅和测试,最终发现下面的解决办法可以解决,记录一下
处理办法
通过--add-data添加依赖文件到打包文件内
--add-data "Z:\code\jupyter_notebook\myenv\Lib\site-packages\py_mini_racer\mini_racer.dll;."--add-data "Z:\code\jupyter_notebook\myenv\Lib\site-packages\akshare\file_fold\calendar.json;./akshare/file_fold"
这两个选项解决了以下问题:
mini_racer.dll缺失:py_mini_racer的核心依赖动态库无法加载。calendar.json缺失:akshare静态文件无法访问导致程序运行失败。
通过手动指定的方式将它们添加它们到打包文件后,运行时能够正确找到这些依赖文件,因此问题解决。
pyinstaller --clean --noconfirm --add-data "Z:\code\jupyter_notebook\myenv\Lib\site-packages\py_mini_racer\mini_racer.dll;." --add-data "Z:\code\jupyter_notebook\myenv\Lib\site-packages\akshare\file_fold\calendar.json;./akshare/file_fold" --onefile --windowed stock_monitor.py