我需要从我的Python 3应用程序创建一个可执行文件。因为我需要在Linux(Ubuntu)和Windows中执行此操作,所以我决定使用PyInstaller(它可以创建一个可执行文件,支持多个平台并可以与Python 3一起使用)。该应用程序使用GDAL转换和扭曲图像。在激活的conda环境中运行它时,效果很好。
这是我用pyi-makespec
生成的规格文件:
# -*- mode: python -*-
block_cipher = None
a = Analysis(['../../src/app.py'],
pathex=['var/pyinstaller/'],
binaries=[],
datas=[],
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
[],
name='app',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
runtime_tmpdir=None,
console=True )
这是它不断抛出的错误:
ERROR 1: PROJ: proj_create_from_database: Open of /home/cisu/anaconda3/envs/env_name/share/proj failed
ERROR 1: Translating source or target SRS failed:
EPSG:5678
ERROR 1: PROJ: proj_create_from_wkt: Open of /home/cisu/anaconda3/envs/env_name/share/proj failed
ERROR 1: PROJ: pj_obj_create: Open of /home/cisu/anaconda3/envs/env_name/share/proj failed
Traceback (most recent call last):
File "src/app.py", line 235, in <module>
File "src/app.py", line 204, in process
File "src/app.py", line 165, in _warp
File "site-packages/osgeo/gdal.py", line 625, in Warp
File "site-packages/osgeo/gdal.py", line 3410, in wrapper_GDALWarpDestName
TypeError: in method 'wrapper_GDALWarpDestName', argument 4 of type 'GDALWarpAppOptions *'
[17879] Failed to execute script app
这是针对--onedir
配置的,其行为与--onefile
配置完全相同。 GDAL未安装在我的系统中,但已安装在我用来构建二进制文件的conda环境中。有人知道我在做什么错吗?
编辑
我在全新的Ubuntu安装中启动了二进制文件,这就是我得到的:
ERROR 1: PROJ: proj_create_from_database: Cannot find proj.db
ERROR 1: Translating source or target SRS failed:
EPSG:5678
由于某些原因,错误有所不同,但仍然无法正常工作。
答案 0 :(得分:0)
我找到了解决此问题的方法。我将文件proj.db
从anaconda环境复制到可执行文件所在的目录,然后将运行时挂钩添加到spec文件中,以将PROJ_LIB
目录设置为可执行文件的当前位置。这是来自规范文件的行:
runtime_hooks=['hook.py']
这是整个hook.py
:
import os
import sys
os.environ['PROJ_LIB'] = os.path.dirname(sys.argv[0])
它可以解决问题,并且只要可执行文件所在的位置proj.db
文件存在,应用程序就可以正常工作。
答案 1 :(得分:0)
也许有点晚,但是我希望这对其他人有帮助。 我遇到了类似的问题,并收到了相同的错误消息:
ERROR 1: PROJ: proj_create_from_wkt: Open of /home/user/miniconda/envs/test_env/share/proj failed
,但使用Python 2.7。您指定了哪个 conda 频道和GDAL版本?也许您可以像我一样解决您的问题,而无需重置环境变量。目前, conda 默认情况下会从 conda-forge 通道安装版本 3.0.0 。我使用较旧的GDAL版本解决了该问题:
conda install -c conda-forge gdal=2.4.1