pyinstaller打包akshare项目无法运行

问题描述:

windows 下打包后出现找不到 mini_racer.dll
ubuntu 下打包后出现找不到 libmini_racer.glibc.so
(无论是 -F 还是 -D 打包都会有这种情况)

windows 下-F报错:

RuntimeBrror: Native library not available at C:\Users\DZQ-836\AppData\Local\Temp\MEI446082\mini_racer.dll

ubuntu 下-F报错:

RuntimeError: Native library not available at /tmp/_MEII9IIno/libmini_racer.glibc.so

解决方案:

使用--add-data选项将额外的数据文件添加到生成的可执行文件中。

--add-data的语法:

--add-data <SRC;DEST or SRC:DEST>

SRC 表示源文件或目录的路径,DEST 表示目标路径,可以是相对路径或绝对路径,用于指定将文件复制到可执行文件中的位置。

-F 解决方案:

1.找到 mini_racer.dll/libmini_racer.glibc.so 的路径

windows下 \xxx\xxx\site-packages\py_mini_racer\mini_racer.dll
ubuntu下 /xxx/xxx/site-packages/py_mini_racer/libmini_racer.glibc.so

2.找到 calendar.json 的路径

windows/ubuntu下 /xxx/xxx/site-packages/akshare/file_fold/calendar.json

3.使用--add-data选项添加这两个文件

windows下打包命令(根据自己路径修改):

 pyinstaller -F .\main.py --add-data "D:\xxx\xxx\site-packages\py_mini_racer\mini_racer.dll;." --add-data "D:\xxx\xxx\site-packages\akshare\file_fold\calendar.json;akshare\file_fold\"
 

ubuntu下打包命令(根据自己路径修改):

pyinstaller -F ./main.py --add-data "/xxx/xxx/anaconda3/envs/myenv/lib/python3.10/site-packages/py_mini_racer/libmini_racer.glibc.so:." --add-data "/xxx/xxx/anaconda3/envs/myenv/lib/python3.10/site-packages/akshare/file_fold/calendar.json;akshare/file_fold/"

-D 解决方案:

1.使用-D打包命令

pyinstaller -F .\main.py

2.找到 mini_racer.dll/libmini_racer.glibc.so 和 calendar.json 的路径(同上)

3.把 mini_racer.dll/libmini_racer.glibc.so 拷贝到打包的执行程序所在目录下

4.在执行程序所在目录下,新建akshare/file_fold/文件夹

5.把 calendar.json 拷贝akshare/file_fold/文件夹下

注意:

windows下`--add-data`使用<SRC;DEST>
ubuntu 下`--add-data`使用<SRC:DEST>
中间分别是;和: