背景:
需要将一个python项目打包成一个exe可执行文件,方便在windows下执行。
遇到问题:
在使用pyinstaller打包代码时,发现基础包能打包进去,但是pandas、numpy等包无法成功打包进去。
尝试的解决办法:
1)、修改spec文件
我们先用正常方法打包一遍py文件,之后会自动生成.spec后缀的文件,我们需要用文本编辑器对spec文件进行更改,好让pyinstaller能正常引用到pandas库:在spec文件内,定义一个方法来取得pandas文件路径:
def get_pandas_path():
import pandas
pandas_path = pandas.__path__[0]
return pandas_path
同时需在a=Analysis这部分代码段下添加以下代码:
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 XXX.spec --onefile
注:该方法尝试过,没有成功
2)、打包命令添加参数。
比如,打包的时候需要pandas,可以修改执行命令添加参数
pyinstaller -F --hidden-import pandas
--hidden-import="pandas._libs.tslibs.timedeltas"
--hidden-import="pandas._libs.tslibs.np_datetime"
--hidden-import="pandas._libs.tslibs.nattype"
--hidden-import="pandas._libs.skiplist"
XXXX.py(自己的文件)
有人成功,但是我没成功
最终解决办法:
修改spec文件,在Analysis中的hiddenimports添加需要导入的包。
比如我的是pandas和numpy在直接打包时没有打包进去,就可以修改为如下:
hiddenimports=['pandas','matplotlib.pyplot','numpy']
然后重新执行pyinstaller XXX.spec --onefile即可。