我发现了一些关于此错误的问题,但我找不到适合我的解决方案。
运行使用 pyinstaller 创建的可执行文件时,出现与 proj.db 相关的错误。
我有 Windows 10、Python 3.5,我的环境中有 pyproj 2.4.2 和 gdal 3.0.4
我在 python 脚本中使用 GDAL,当我使用 Pycharm 测试脚本时,我有一个运行良好的环境。所以我的 pycharm 解释器指向带有 python 3.5、pyproj 2.4.2 和 gdal 3.0.4 的环境,并且脚本运行没有问题。
但是,当我使用 pyinstaller 构建独立脚本时,该脚本会引发下一个错误:
`ERROR 1: PROJ: proj_create_from_database: Cannot find proj.db`
`PROJ: proj_identify: Cannot find proj.db`
`Failed to auto identify EPSG: 7`
`PROJ: proj_identify: Cannot find proj.db`
`Failed to auto identify EPSG: 7`
所以我尝试在脚本中以不同的方式设置 proj 库的路径:
os.environ['GDAL_DATA'] = r'C:\Program Files\QGIS 3.4\share\gdal'
os.environ['PROJ_LIB'] = r'C:\Program Files\QGIS 3.4\share\proj'
os.environ['PROJ_LIB'] = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'proj.db')
然后再次运行pyinstaller,但是不起作用。
此外,我尝试将选项“-p 'path_to_osgeo'”添加到我的 pyinstaller 命令中,但它没有任何操作。
我不确定脚本从哪里获取proj.db,它是来自虚拟环境还是来自计算机中的环境变量。我不知道如何告诉 pyinstaller 或者如何将 proj.db 的正确路径添加到我的脚本中,这样当我构建可执行文件时,我就不会再收到此错误了。
我不知道为什么当我使用pycharm运行脚本时它可以工作,但当我创建可执行文件时它不起作用。
有什么建议吗?
谢谢你
您问题的解决方案将取决于您的具体设置,我发现很难从您的问题中推断出这一点。
在我的例子中,有一个 PostgreSQL 安装将
PROJ_LIB
环境变量设置为其自己的环境(请参阅 mmann1123 提供的链接)。 Conda 环境优雅地屏蔽了这一点,为 Python 代码指向 proj.db 的正确 Conda 安装,因此一切运行良好。然而,一旦用 pyinstaller 打包代码,这个到 proj.db 的链接就失效了。
对我有用的是使用
os.unsetenv('PROJ_LIB')
清除 Python 代码顶部的环境变量,然后将 proj.db 从相应的 Conda 环境复制到与 pyinstaller 生成的 .exe 文件相同的目录中。现在通过代码发现没有问题了。