使用PyInstaller打包含backtesting.py模块的程序时出错求助
问题:PyInstaller打包含backtesting.py的Python程序为EXE后无法运行
环境与现象
Windows 11系统下开发Python程序,使用backtesting.py模块,在VS Code或控制台运行正常,但用PyInstaller打包成EXE后无法运行。即使精简代码为以下两行,EXE仍无法工作:
import backtesting print("Hello")
PyInstaller打包时的警告
115289 WARNING: Library user32 required via ctypes not found 115301 WARNING: Library msvcrt required via ctypes not found
运行EXE时的错误
C:\Users\menb\Documents\tests\test3\test3>test3 Traceback (most recent call last): File "test3.py", line 1, in <module> File "<frozen importlib._bootstrap>", line 1027, in _find_and_load File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 688, in _load_unlocked File "PyInstaller\loader\pyimod02_importers.py", line 352, in exec_module File "backtesting\__init__.py", line 60, in <module> File "<frozen importlib._bootstrap>", line 1027, in _find_and_load File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 688, in _load_unlocked File "PyInstaller\loader\pyimod02_importers.py", line 352, in exec_module File "backtesting\backtesting.py", line 32, in <module> File "<frozen importlib._bootstrap>", line 1027, in _find_and_load File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 688, in _load_unlocked File "PyInstaller\loader\pyimod02_importers.py", line 352, in exec_module File "backtesting\_plotting.py", line 43, in <module> FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\menb\\Documents\\tests\\test3\\test3\\backtesting\\autoscale_cb.js' [33336] Failed to execute script 'test3' due to unhandled exception!
解决步骤
1. 修复静态资源缺失问题
错误提示找不到autoscale_cb.js,这是backtesting模块自带的静态资源文件,PyInstaller默认不会自动打包这类非Python文件。操作如下:
- 找到Python环境中
backtesting模块的安装路径(比如Lib\site-packages\backtesting),确认里面包含autoscale_cb.js、相关CSS等静态文件。 - 使用PyInstaller的
--add-data参数打包这些资源,Windows下命令格式:
注意替换实际路径,Windows用分号pyinstaller --add-data "你的site-packages路径\backtesting\*.js;backtesting" --add-data "你的site-packages路径\backtesting\*.css;backtesting" test3.py;分隔源路径和目标路径,其他系统用冒号:。
2. 处理ctypes依赖库警告
user32和msvcrt是Windows系统自带库,一般无需额外打包,但可通过以下方式消除警告:
- 打包命令中添加
--hidden-import ctypes,确保PyInstaller识别ctypes依赖:pyinstaller --add-data "你的site-packages路径\backtesting\*.js;backtesting" --add-data "你的site-packages路径\backtesting\*.css;backtesting" --hidden-import ctypes test3.py
3. 验证打包结果
打包完成后,进入生成的dist目录运行EXE,确认是否正常输出Hello且无报错。若还有其他资源缺失,重复步骤1用--add-data加入对应文件。
内容的提问来源于stack exchange,提问作者Menachem
相关产品推荐
相关产品推荐

