исполняемый файл pyinstaller не работает - PullRequest
0 голосов
/ 06 июня 2019

Мне нужно создать исполняемый файл из моего приложения 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, которую я использую для создания двоичного файла. У кого-нибудь есть идеи, что я делаю не так?

EDIT

Я запустил двоичный файл в новой установке Ubuntu, и вот что у меня есть:

ERROR 1: PROJ: proj_create_from_database: Cannot find proj.db
ERROR 1: Translating source or target SRS failed:
EPSG:5678

По какой-то причине ошибка другая, но она все еще не работает.

Ответы [ 2 ]

0 голосов
/ 25 июня 2019

Может быть, немного поздно, но я надеюсь, что это может помочь кому-то еще. У меня была похожая проблема, и я получил то же сообщение об ошибке:

ERROR 1: PROJ: proj_create_from_wkt: Open of /home/user/miniconda/envs/test_env/share/proj failed

, но с Python 2.7. Какой канал conda и какую версию GDAL вы указали? Может быть, вы можете решить вашу проблему так же, как я, без сброса переменной среды. На данный момент conda устанавливает версию 3.0.0 из канала conda-forge по умолчанию. Я решил это, используя более старую версию GDAL:

conda install -c conda-forge gdal=2.4.1
0 голосов
/ 06 июня 2019

Я нашел решение этой проблемы.Я скопировал файл proj.db из среды anaconda в каталог, где находится исполняемый файл, а затем добавил ловушку времени выполнения в файл спецификации, чтобы установить каталог PROJ_LIB в текущее местоположение исполняемого файла.Это строка из spec-файла:

runtime_hooks=['hook.py']

, а вот и все hook.py:

import os
import sys

os.environ['PROJ_LIB'] = os.path.dirname(sys.argv[0])

Это решает проблему, и приложение работает до тех пор, пока proj.db файл существует в месте расположения исполняемого файла.

...