windows和linux都可以跑
但是没有用py2exe打包
因为打出来的包不能用
暂时不知道怎么解决
所以只有装了python的朋友可以运行了
直接运行./go.py揍可以啦
呵呵
多提建议呀兄弟们
更新了一下,增加了几个随机事件 :D
谁能帮忙打个windows的单独执行包吗
感激了!!
[ 本帖最后由 bleem1998 于 2006-2-11 18:25 编辑 ]
zhfsj.zip
wolfg 回复于:2006-02-11 13:51:19
windows安装pygtk有什么要求?
bleem1998 回复于:2006-02-11 17:41:19
先装python
然后这个(gtk\glade)
http://prdownloads.sourceforge.net/gladewin32/gtk-win32-devel-2.8.10-rc1.exe?download
然后这个(pygtk)
http://ftp.gnome.org/pub/GNOME/sources/pygtk/2.8/pygtk-2.8.4.tar.gz
wolfg 回复于:2006-02-12 23:49:08
引用:原帖由 bleem1998 于 2006-2-11 17:41 发表
先装python
然后这个(gtk\glade)
http://prdownloads.sourceforge.net/gladewin32/gtk-win32-devel-2.8.10-rc1.exe?download
然后这个(pygtk)
http://ftp.gnome.org/pub/GNOME/sources/pygtk ...
多谢!我试了一下,windows下的安装:
先安装GTK runtime,可以用这个gladewin32
http://gladewin32.sourceforge.net/
然后是pygtk的win32port
http://www.mapr.ucl.ac.be/~gustin/win32_ports/
为Python 2.4安装时一定要注意同时下载pycairo,就在pygtk下载链接的下面
呵呵,可以运行你的“珠海浮生记”了。
在windows下运行,有这样的message出现:
引用:D:\Downloads\Python\pygtk\zhfsj\go.py:13: PangoWarning: Couldn't load font "瀹嬩
綋 9" falling back to "Sans 9"
xml = gtk.glade.XML('zhfsj.glade')
System initialise...
D:\Downloads\Python\pygtk\zhfsj\go.py:22: PangoWarning: Couldn't load font "瀹嬩
綋 9" falling back to "Sans 9"
gtk.main()
D:\Downloads\Python\pygtk\zhfsj\signal_handle.py:52: PangoWarning: Couldn't load
font "瀹嬩綋 9" falling back to "Sans 9"
wd["win_msg"].show_all()
是字体的问题吧?
[ 本帖最后由 wolfg 于 2006-2-12 23:55 编辑 ]
wolfg 回复于:2006-02-13 00:00:45
用py2exe生成exe文件后,错误信息是这样的。看来是找不到字体的问题。不影响程序的功能
引用:D:\Downloads\Python\pygtk\zhfsj\dist\go.exe:13: PangoWarning: Couldn't load font "宋体 9" falling back to "Sans 9"
D:\Downloads\Python\pygtk\zhfsj\dist\go.exe:22: PangoWarning: Couldn't load font "宋体 9" falling back to "Sans 9"
[ 本帖最后由 wolfg 于 2006-2-13 00:05 编辑 ]
wolfg 回复于:2006-02-13 00:04:18
引用:原帖由 bleem1998 于 2006-2-11 00:05 发表
谁能帮忙打个windows的单独执行包吗
可以考虑结合py2exe和InnoSetup做一个windows下的安装程序
http://www.async.com.br/faq/pygtk/index.py?req=show&file=faq21.005.htp
有空的话,帮你看看
bleem1998 回复于:2006-02-13 01:26:08
能否贴一下你的setup.py
我编译出来的总是出现libpango.dll的错误
wolfg 回复于:2006-02-13 09:27:17
引用:原帖由 bleem1998 于 2006-2-13 01:26 发表
能否贴一下你的setup.py
我编译出来的总是出现libpango.dll的错误
我用的就是你的setup.py啊
jejwe 回复于:2006-02-13 14:51:10
引用:原帖由 wolfg 于 2006-2-12 23:49 发表
多谢!我试了一下,windows下的安装:
先安装GTK runtime,可以用这个gladewin32
http://gladewin32.sourceforge.net/
然后是pygtk的win32port
http://www.mapr ...
安装不成功啊,我把GTK runtime安装在C盘的GTK目录里,
gtk-2.0和cairo安装在
C:\Program Files\python\Lib\site-packages
一开始老是出现动态链接库的问题,说找不到,于是去GTK下BIN里的DLL文件复制到C:\WINNT\system32,但是这时又出现“无法定位程序输入点libconv_set_relocation_prefix于动态链接库ICONV.DLL上”
wolfg 回复于:2006-02-13 15:09:22
你装的版本都是什么?
jejwe 回复于:2006-02-13 15:15:52
PY2.4及上面提供的版本,
我干脆把BIN下的所有DLL库都COPY到system32下了,这下不提示了,不过出现其他问题
jejwe 回复于:2006-02-13 15:24:33
D:\python\zhfsj>python go.py
go.py:13: PangoWarning: No builtin or dynamically loaded modules
were found. Pango will not work correctly. This probably means
there was an error in the creation of:
'C:\WINNT\system32\etc\pango\pango.modules'
You may be able to recreate this file by running pango-querymodules.
xml = gtk.glade.XML('zhfsj.glade')
go.py:13: PangoWarning: _pango_engine_shape_shape: assertion `PANGO_IS_FONT (fon
t)' failed
xml = gtk.glade.XML('zhfsj.glade')
wolfg 回复于:2006-02-13 17:24:44
引用:原帖由 jejwe 于 2006-2-13 15:24 发表
D:\python\zhfsj>python go.py
go.py:13: PangoWarning: No builtin or dynamically loaded modules
were found. Pango will not work correctly. This probably means
there was an error in the creation ...
我的安装过程是这样的:
1. gtk-win32-2.8.10-rc1.exe
http://gladewin32.sourceforge.net/
2. pycairo-1.0.2-1.win32-py2.4.exe
3. pygtk-2.8.4-1.win32-py2.4.exe
http://www.mapr.ucl.ac.be/~gustin/win32_ports/
[ 本帖最后由 wolfg 于 2006-2-13 17:29 编辑 ]
bleem1998 回复于:2006-02-13 18:06:06
我打出来的包也出现和jejwe一样的错误
wolfg 回复于:2006-02-13 20:13:47
引用:原帖由 bleem1998 于 2006-2-13 18:06 发表
我打出来的包也出现和jejwe一样的错误
参考一下这个
http://www.async.com.br/faq/pygtk/index.py?req=show&file=faq21.002.htp
会不会是因为缺libglade?
bleem1998 回复于:2006-02-13 22:45:42
估计不是
dist目录下有libglade-2.0-0.dll
搜索了一下错误信息
网上也有人遇到
解决办法是删除libpango-1.0-0.dll这个文件
程序就正常运行了
可是打包确实没有成功
拿到别的机器上用不了
wolfg 回复于:2006-02-14 13:12:57
py2exe打包后的程序运行还是得需要GTK的runtime library
看这里
http://starship.python.net/crew/theller/moin.cgi/Py2exeAndPyGTK
的最后一段
可以把GTK的runtime library用InnoSetup一起打包制成安装程序
wolfg 回复于:2006-02-14 16:00:58
我修改过的setup.py
需要先安装InnoSetup
isetup-5.1.6.exe
http://www.jrsoftware.org/isdl.php
ChineseSimp-11-5.1.0.isl
http://www.jrsoftware.org/files/istrans/
最好也有安装python的ctypes模块
http://starship.python.net/crew/theller/ctypes/
假设GTK已经安装在C:\GTK
Gtk+/Win32 Runtime Environment Installer 2.8.10-rc1 (.exe, 5.21M)
http://gladewin32.sourceforge.net/modules/wfdownloads/visit.php?lid=97
# setup.py
# -*- coding: cp936 -*-
# Author: wolfg
# A setup script showing how to extend py2exe.
#
# In this case, the py2exe command is subclassed to create an installation
# script for InnoSetup, which can be compiled with the InnoSetup compiler
# to a single file windows installer.
#
# By default, the installer will be created as dist\Output\setup.exe.
from distutils.core import setup
import py2exe
import sys
import glob
################################################################
# arguments for the setup() call
livinginzhuhai = dict(
script = "go.py",
#other_resources = [],
#icon_resources = [(1, "check.ico")],
dest_base = r"bin\go")
zipfile = r"lib\shardlib"
options = {"py2exe":
{
"compressed": 1,
"optimize": 2,
"packages": "encodings",
"includes": "cairo, pango, pangocairo, atk, gobject",
}
}
################################################################
import os
GTKDIR = 'C:\\gtk\\'
os.environ['PATH'] += ";%s/lib;%s/bin" % (GTKDIR, GTKDIR)
GTK_RUNTIME_FILES = glob.glob(GTKDIR + 'etc\\*\\*')
GTK_RUNTIME_FILES += glob.glob(GTKDIR + 'lib\\*.a')
GTK_RUNTIME_FILES += glob.glob(GTKDIR + 'lib\\*.alias')
GTK_RUNTIME_FILES += glob.glob(GTKDIR + 'lib\\*.lib')
GTK_RUNTIME_FILES += glob.glob(GTKDIR + 'lib\\glib-2.0\\include\\*.*')
GTK_RUNTIME_FILES += glob.glob(GTKDIR + 'lib\\gtk-2.0\\2.4.0\\*\\*.*')
GTK_RUNTIME_FILES += glob.glob(GTKDIR + 'lib\\gtk-2.0\\include\\*.*')
GTK_RUNTIME_FILES += glob.glob(GTKDIR + 'lib\\gtkglext-1.0\\include\\*.*')
GTK_RUNTIME_FILES += glob.glob(GTKDIR + 'lib\\libglade\\2.0\\include\\*.*')
GTK_RUNTIME_FILES += glob.glob(GTKDIR + 'lib\\pango\\1.4.0\\modules\\*.*')
GTK_RUNTIME_FILES += glob.glob(GTKDIR + 'lib\\pkgconfig\\*.*')
GTK_RUNTIME_FILES += glob.glob(GTKDIR + 'share\\aclocal\\*')
GTK_RUNTIME_FILES += glob.glob(GTKDIR + 'share\\xml\\libglade\\*')
GTK_RUNTIME_FILES += glob.glob(GTKDIR + 'share\\pixmaps\\*.png')
GTK_RUNTIME_FILES += glob.glob(GTKDIR + 'share\\pixmaps\\glade-2\\*.png')
GTK_RUNTIME_FILES += glob.glob(GTKDIR + 'share\\locale\\zh_CN\\*\\*')
GTK_RUNTIME_FILES += glob.glob(GTKDIR + 'share\\themes\\Default\\*\\*')
GTK_RUNTIME_FILES += glob.glob(GTKDIR + 'share\\themes\\MS-Windows\\*\\*')
class InnoScript:
def __init__(self,
name,
install_dir,
lib_dir,
dist_dir,
windows_exe_files = [],
lib_files = [],
version = "1.0",
output_basename = "Setup"):
self.lib_dir = lib_dir
self.dist_dir = dist_dir
if not self.dist_dir[-1] in "\\/":
self.dist_dir += "\\"
self.name = name
self.install_dir = install_dir
self.version = version
self.output_basename = output_basename
self.windows_exe_files = [self.chop(p) for p in windows_exe_files]
self.lib_files = [self.chop(p) for p in lib_files]
def chop(self, pathname):
assert pathname.startswith(self.dist_dir)
return pathname[len(self.dist_dir):]
def create(self, pathname="dist\\livinginzhuhai.iss"):
self.pathname = pathname
ofi = self.file = open(pathname, "w")
print >> ofi, "; WARNING: This script has been created by py2exe. Changes to this script"
print >> ofi, "; will be overwritten the next time py2exe is run!"
print >> ofi, r"[Setup]"
print >> ofi, r"AppName=%s" % self.name
print >> ofi, r"AppVerName=%s %s" % (self.name, self.version)
print >> ofi, r"DefaultDirName={pf}\%s" % self.install_dir
print >> ofi, r"DefaultGroupName=%s" % self.name
print >> ofi, r"Compression=lzma"
print >> ofi, r"SolidCompression=yes"
print >> ofi, r"OutputBaseFilename=%s" % self.output_basename
print >> ofi
print >> ofi, r"[Files]"
for path in self.windows_exe_files + self.lib_files:
print >> ofi, r'Source: "%s"; DestDir: "{app}\%s"; Flags: ignoreversion' % (path, os.path.dirname(path))
for src, dest in [(p, p[len(GTKDIR):]) for p in GTK_RUNTIME_FILES]:
print >> ofi, r'Source: "%s"; DestDir: "{app}\%s"; Flags: ignoreversion' % (src, os.path.dirname(dest))
print >> ofi
print >> ofi, r"[Tasks]"
print >> ofi, r'Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked'
print >> ofi
print >> ofi, r"[Icons]"
for path in self.windows_exe_files:
print >> ofi, r'Name: "{group}\%s"; Filename: "{app}\%s"; WorkingDir: "{app}\%s"' % \
(self.name, path, os.path.dirname(path))
print >> ofi, r'Name: "{group}\Uninstall %s"; Filename: "{uninstallexe}"' % self.name
print >> ofi, r'Name: "{userdesktop}\%s"; Filename: "{app}\bin\go.exe"; Tasks: desktopicon; WorkingDir: "{app}\bin"' % self.name
print >> ofi
print >> ofi, r"[Run]"
print >> ofi, r'Filename: "{app}\bin\go.exe"; Description: "%s"; Flags: postinstall shellexec skipifsilent' % (u'开始“珠海浮生记”').encode('cp936')
print >> ofi
print >> ofi, r"[Languages]"
print >> ofi, r'Name: "cn"; MessagesFile: "C:\Program Files\Inno Setup 5\Languages\ChineseSimp.isl"'
print >> ofi
def compile(self):
try:
import ctypes
except ImportError:
try:
import win32api
except ImportError:
import os
os.startfile(self.pathname)
else:
print "Ok, using win32api."
win32api.ShellExecute(0, "compile",
self.pathname,
None,
None,
0)
else:
print "Cool, you have ctypes installed."
res = ctypes.windll.shell32.ShellExecuteA(0, "compile",
self.pathname,
None,
None,
0)
if res < 32:
raise RuntimeError, "ShellExecute failed, error %d" % res
################################################################
from py2exe.build_exe import py2exe
class build_installer(py2exe):
# This class first builds the exe file(s), then creates a Windows installer.
# You need InnoSetup for it.
def run(self):
# First, let py2exe do it's work.
py2exe.run(self)
lib_dir = self.lib_dir
dist_dir = self.dist_dir
# create the Installer, using the files py2exe has created.
script = InnoScript(u"珠海浮生记".encode('cp936'),
u"珠海浮生记".encode('cp936'),
lib_dir,
dist_dir,
self.windows_exe_files,
self.lib_files,
'1.0',
output_basename="Setup"
)
print "*** creating the inno setup script***"
script.create()
print "*** compiling the inno setup script***"
script.compile()
# Note: By default the final setup.exe will be in an Output subdirectory.
################################################################
setup(
options = options,
# The lib directory contains everything except the executables and the python dll.
zipfile = zipfile,
windows = [livinginzhuhai],
# use out build_installer class as extended py2exe build command
cmdclass = {"py2exe": build_installer},
data_files=[("bin", ["zhfsj.glade", ])]
)
[ 本帖最后由 wolfg 于 2006-2-14 16:05 编辑 ]
bleem1998 回复于:2006-02-14 19:19:05
出现这个错误
D:\zhfsj>python setup.py py2exe
running py2exe
*** searching for required modules ***
Traceback (most recent call last):
File "setup.py", line 199, in ?
data_files=[("bin", ["zhfsj.glade", ])]
File "D:\Python24\lib\distutils\core.py", line 149, in setup
dist.run_commands()
File "D:\Python24\lib\distutils\dist.py", line 946, in run_commands
self.run_command(cmd)
File "D:\Python24\lib\distutils\dist.py", line 966, in run_command
cmd_obj.run()
File "setup.py", line 169, in run
py2exe.run(self)
File "D:\Python24\Lib\site-packages\py2exe\build_exe.py", line 197, in run
self._run()
File "D:\Python24\Lib\site-packages\py2exe\build_exe.py", line 248, in _run
self.find_needed_modules(mf, required_files, required_modules)
File "D:\Python24\Lib\site-packages\py2exe\build_exe.py", line 1144, in find_
eeded_modules
mf.import_hook(mod)
File "D:\Python24\Lib\site-packages\py2exe\mf.py", line 103, in import_hook
return Base.import_hook(self,name,caller,fromlist)
File "D:\Python24\lib\modulefinder.py", line 124, in import_hook
q, tail = self.find_head_package(parent, name)
File "D:\Python24\lib\modulefinder.py", line 178, in find_head_package
raise ImportError, "No module named " + qname
ImportError: No module named pangocairo
D:\zhfsj>
wolfg 回复于:2006-02-15 09:30:37
[color=#FF0000]ImportError: No module named pangocairo[/color]
你有安装pycairo模块吗?
http://www.mapr.ucl.ac.be/~gustin/win32_ports/binaries/pycairo-1.0.2-1.win32-py2.4.exe
bleem1998 回复于:2006-02-15 19:43:09
果然是没有安装pycairo
可是安装后打包依然不行
运行时错误是一样的。。。。
不过InnoSetup这个东西着实不错!!
:D
[ 本帖最后由 bleem1998 于 2006-2-15 19:54 编辑 ]
wolfg 回复于:2006-02-16 09:18:57
引用:原帖由 bleem1998 于 2006-2-15 19:43 发表
果然是没有安装pycairo
可是安装后打包依然不行
运行时错误是一样的。。。。
不过InnoSetup这个东西着实不错!!
:D
呵呵,我用InnoSetup很久了。
我上面的那个脚本中创建的InnoSetup工程里已经包含GTK的runtime了,我这里试了,安装在没有GTK的机器上是没有问题的。
Groot 回复于:2006-02-16 11:07:12
唉.......我下不了啊.
yuki-angel 回复于:2006-03-01 14:29:11
打包不能用么?
bleem1998 回复于:2006-03-01 18:02:23
我在windows下打的包不能用
不太会用py2exe
:(
wolfg 回复于:2006-03-02 09:28:15
引用:原帖由 bleem1998 于 2006-3-1 18:02 发表
我在windows下打的包不能用
不太会用py2exe
:(
我写的setup.py也不行吗?
bleem1998 回复于:2006-03-02 16:19:58
8行
一样的错误
我想可能是我们用的GTK不一样吧
镜花缘 回复于:2006-03-26 22:28:21
不是很明白.建议写详细一点.
|