问题:使用Pyinstaller打包的过程中没发生报错,但执行exe文件时发生错误。
打包过程没有问题,但报了关于Pandas的错误,提示没有找到’pandas._libs.tslibs.np_datetime’,大致错误如下:
ImportError: C extension:
'pandas._libs.tslibs.np_datetime' not built. If you want to import pandas from the s
ource directory, you may need to run 'python setup.py build_ext --inplace' to bu
ild the C extensions first.
这代码的意思就是pandas是由C语言编制的,pyinstaller正尝试获取pandas代码,就算指定了路径 -p /lib/site-packages也不行
解决方法:
在./Lib/site-packages/PyInstaller/hooks下,新建一个文件名为hook-pandas.py(一般都有,直接更改)。写入以下内容并保存。
hiddenimports = ['pandas._libs.tslibs.timedeltas',
'pandas._libs.tslibs.nattype',
'pandas._libs.tslibs.np_datetime',
'pandas._libs.skiplist']
上面是基本包括了pandas的了。所以基本import pandas的都可以用这个来解决。
参考的其他大佬博客
解决方法拓展:
但我在使用以上解决方法的时候,问题并没有得到解决,该报错的还是报错,于是我就去其他论坛找解决思路与方法。
最终我解决了此类问题:
照常的生成 xxx.spec 文件,修改spec文件,在文件中添加以下代码:
a = Analysis(...)
# Add the following
def get_pandas_path():
import pandas
pandas_path = pandas.__path__[0]
return pandas_path
dict_tree = Tree(get_pandas_path(), prefix='pandas', excludes=["*.pyc"])
a.datas += dict_tree
a.binaries = filter(lambda x: 'pandas' not in x[0], a.binaries)
之所以需要这样做,是因为PyInstaller正在获取pandas python代码,而不是lib。这意味着,当pandas代码运行时(从可执行文件的“内部”),它找不到库–因此它试图提供帮助并建议您构建它。
希望我的文章可以对你有所帮助。
引用:
https://github.com/pyinstaller/pyinstaller/issues/1580
https://blog.csdn.net/cyx441984694/article/details/80883554