在venv环境下,通过命令行pyinstaller执行打包命令,打包过程没有异常,但是打包成功后,执行在venv环境下,在命令行执行pyinstaller进行打包,打包过程一切正常,打包成功后,执行dist/xxx.exe文件时,出现如下类似错误:
Traceback (most recent call last):
File "main.py", line 4, in <module>
import jcw
File "PyInstaller\loader\pyimod03_importers.py", line 531, in exec_module
File "jcw.py", line 3, in <module>
import pandas as pd
ModuleNotFoundError: No module named 'pandas'
解决方式:
由于运行环境为venv虚拟环境,所以命令行打包时可能使用的是计算机中python的安装环境,也就是全局环境和依赖库,导致打包时没能将所需模块包含进去。
使用pyinstaller官网的另一种打包方式,python代码形式运行打包命令,如:
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import PyInstaller.__main__
import os
if __name__ == '__main__':
pyi_args = [
'--upx-dir=F:\\soft\\upx-3.96-win64',
'--clean',
'--add-data={0};.'.format(os.path.realpath('cfg.ini')),
'--add-binary={0};driver'.format(os.path.realpath('driver/chromedriver.exe')),
'--name=demo',
'main.py',
'-y'
]
print("pyinstaller " + " ".join(pyi_args))
PyInstaller.__main__.run(pyi_args=pyi_args)
网上搜索的几种方式没起效(可以试试自己环境是否可以):
1. 将import语句从文件头部移到代码块中
2. 命令行使用--hidden-import=缺失模块
参考:
2. pyinstaller