2014-07-28 2 views
0

Я пытаюсь создать исполняемый файл для некоторого кода в Python3.4 для распространения в Windows. Эта программа требует GDAL для некоторых функций отображения, но он приходит в отсутствующих модулях во время cx_Freeze сборки:Импорт GDAL с cx_Freeze, Python3.4

Missing modules: 
? _gdal imported from osgeo, osgeo.gdal 
? _gdal_array imported from osgeo.gdal_array 
? _gdalconst imported from osgeo.gdalconst 
? _ogr imported from osgeo.ogr 
? _osr imported from osgeo.osr 

cx_Freeze .exe еще строит, но когда я пытаюсь запустить его, я, естественно, получить:

Ниже моя установка скрипта:

import sys 
from cx_Freeze import setup, Executable 

application_title = "Parametric_Price" #what you want to application to be called 
main_python_file = "ParamMain.py" #the name of the python file you use to run the program 

base = None 
if sys.platform == "win32": 
    base = "Win32GUI" 

includes = ["atexit","re","osgeo.ogr"] 
packages = ["osgeo"] 
# includeFiles = 

build_exe_options = {"packages": packages, "includes": includes} 

setup(
     name = application_title, 
     version = "0.1", 
     description = "Parametric pricing tool using historical earthquake, hurricane datasets", 
     options = {"build_exe" : build_exe_options }, 
     executables = [Executable(main_python_file, base = base)]) 

Я пробовал различные способы включения модуля вручную включает в опциях build_exe в файле настройки cx_Freeze, чтобы не является vail, а находиться на Python3 действительно ограничивает мои возможности для альтернативных исполняемых инструментов распространения. Кто-нибудь понял, как решить этот импорт?

+0

Если вы выполните 'import _gdal', а затем' print_gdal' в оболочке Python, что вы видите? –

+0

@ThomasK Импортирует без ошибок, и я могу получить доступ к его функциям. В самой программе я импортирую ее косвенно через osgeo.ogr, osgeo.osr, и он работает правильно там. Я считаю, что проблема связана с моей установкой cx_Freeze. – khe

+0

Я понимаю. Но 'print_gdal' должен показать вам, откуда он загружен, что может дать представление о том, почему cx_Freeze не находит его. –

ответ

1

У меня такие же проблемы, похоже, проблема, связанная с SWIG. моего обходной путь, чтобы получить от TraceBack всех файлов «OSGeo», которые бросают исключение и вручную изменить код (например, C: \ Python34 \ Lib \ сайта-пакеты \ osgeo__init __ р.) Со следующим фрагментом:

except ImportError: 
    import _gdal 
    return _gdal 

к:

except ImportError: 
    from osgeo import _gdal # MANUAL PATCH: added 'from osgeo' 
    return _gdal 

Надеется, что это помогает!