虚拟环境下使用Pyinstaller打包Shapely项目缺失geos_c.dll如何解决
venv环境下Pyinstaller打包Shapely缺失geos_c.dll的解决方案
出现该问题的原因是Pyinstaller默认不会扫描虚拟环境中shapely库自带的DLL目录,因此找不到依赖的geos_c.dll,可通过以下任意一种方法解决:
方法1:打包命令直接附加二进制文件
执行打包命令时通过--add-binary参数手动指定geos_c.dll的路径,Windows环境下命令如下:
pyinstaller --onefile --add-binary "venv/Lib/site-packages/shapely/DLLs/geos_c.dll;." main.py
参数说明:引号内分号前为dll在本地的路径,分号后的.表示打包后将该dll放在exe运行的根目录,单文件模式下会自动解压到运行时临时目录,可被正常识别。
方法2:通过spec文件配置依赖
适合需要多次打包、或需要添加多个依赖的场景:
- 先生成spec配置文件:
pyi-makespec --onefile main.py
- 打开生成的
main.spec文件,找到datas字段,修改为:
datas=[("venv/Lib/site-packages/shapely/DLLs/geos_c.dll", ".")],
- 基于修改后的spec文件执行打包:
pyinstaller main.spec
方法3:添加环境变量(本地生效)
将venv\Lib\site-packages\shapely\DLLs路径添加到当前系统的Path环境变量中,重启终端后Pyinstaller即可自动扫描到该dll,无需额外加参数即可正常打包,该方法仅对当前配置过环境变量的设备生效。
注意事项
如果你的虚拟环境名称不是默认的venv,请将上述路径中的venv替换为你实际的虚拟环境文件夹名。
内容的提问来源于stack exchange,提问作者o.sk
相关产品推荐
相关产品推荐

