我有一個小py程序,它使用py27 & pygtk。我可以很快樂地用cx_freeze來凍結這個。cx_freeze&pygobject在子目錄中
我一直在試圖「移植」到py33 & pygobject。這已經非常成功地完成了,我並沒有試圖讓我的setup.py cx_freeze腳本現在「凍結」應用程序。
我能夠凍結一個測試應用程序,但當我然後嘗試使用我的調整版本時,我收到一個ImportError。我所做的是將所有的二進制數據放入一個子目錄(bin)中,以儘量減少根目錄的亂碼。
如上所述,這可以很好地與py27 & pygtk。
我已經縮小它DOWNTO簡單PY和設置,以證明這一點:
TEST.py
########################################################################
import os
import sys
if getattr(sys,'frozen',False):
# if trap for frozen script wrapping
sys.path.append(os.path.join(os.path.dirname(sys.executable),'bin'))
sys.path.append(os.path.join(os.path.dirname(sys.executable),'bin\\etc'))
sys.path.append(os.path.join(os.path.dirname(sys.executable),'bin\\lib'))
sys.path.append(os.path.join(os.path.dirname(sys.executable),'bin\\share'))
sys.path.append(os.path.join(os.path.dirname(sys.executable),'bin\\library.zip'))
os.environ['TCL_LIBRARY'] = os.path.join(os.path.dirname(sys.executable),'bin\\tcl')
os.environ['TK_LIBRARY'] = os.path.join(os.path.dirname(sys.executable),'bin\\tk')
os.environ['MATPLOTLIBDATA'] = os.path.join(os.path.dirname(sys.executable),'bin\\mpl-data')
import gi
import gi.repository
from gi.repository import Gtk
#######################################################################
setup.py
########################################################################
from cx_Freeze import setup, Executable
import sys
import site
import os
site_dir = site.getsitepackages()[1]
include_dll_path = os.path.join(site_dir, "gnome")
missing_dll = ['libgtk-3-0.dll',
'libgdk-3-0.dll',
'libatk-1.0-0.dll',
'libcairo-gobject-2.dll',
'libgdk_pixbuf-2.0-0.dll',
'libjpeg-8.dll',
'libpango-1.0-0.dll',
'libpangocairo-1.0-0.dll',
'libpangoft2-1.0-0.dll',
'libpangowin32-1.0-0.dll',
'libgnutls-26.dll',
# 'libgcrypt-11.dll',
#'libp11-kit-0.dll'
]
gtk_libs = ['etc', 'lib', 'share']
include_files = []
for dll in missing_dll:
include_files.append((os.path.join(include_dll_path, dll), dll))
for lib in gtk_libs:
include_files.append((os.path.join(include_dll_path, lib), lib))
includes = ['gi']
excludes = ['wx','email','pydoc_data','curses']
packages = ['gi']
sys.path.append(os.path.join(os.path.dirname(__file__), '.', 'bin'))
EXE1 = Executable(
script = "test.py",
initScript = None,
base = 'Console',
targetDir = "dist",
targetName = "test.exe",
compress = True,
copyDependentFiles = True,
appendScriptToExe = True,
appendScriptToLibrary = False,
)
setup(
version = "9999",
description = "test",
author = "jrb",
name = "test",
options = {"build_exe": {"includes": includes,
"excludes": excludes,
"packages": packages,
'include_files':include_files,
"path": sys.path,
'append_script_to_exe':False,
'build_exe':"dist/bin",
'compressed':True,
'copy_dependent_files':True,
'create_shared_zip':True,
'include_in_shared_zip':True,
'optimize':2,
}
},
executables = [EXE1]
)
########################################################################
現在,當我運行:/ C/Python33/python -OO setup.py build 然後執行dist/test.exe我已經打印到控制檯:
錯誤:根:無法找到任何類型庫爲Gtk 回溯(最近調用最後一次): 文件「c:\ Python33 \ lib \ site-packages \ cx_Freeze \ initscripts \ Console3.py」,第27行,在 exec(code,m。 字典) 文件「test.py」,第19行,在 導入錯誤:無法導入名稱的Gtk
我已經確認並存在類型庫文件,但無論出於何種原因蟒蛇& GI無法找到他們。我認爲這可能是girepository的缺失路徑,但這並沒有解決它。 任何想法?