我有一个应用程序,它依赖于我为Linux工作而构建的PyGTK,PyGobject和PyCairo。我想将它移植到Windows,但是当我执行import gobject
时,我得到了这个:
Traceback (most recent call last):
import gobject
File "C:\Python26\lib\site-packages\gtk-2.0\gobject\__init__.py", line 30, in <module>
from gobject.constants import *
File "C:\Python26\lib\site-packages\gtk-2.0\gobject\constants.py", line 22, in <module>
from _gobject import type_from_name
ImportError: DLL load failed: The specified procedure could not be found.
这似乎是由使用MinGW构建到Microsoft Visual Studio的转换引起的,如文档Python Bug 3308(closed: wontfix
)所示。
有没有办法以一种可以在Windows上使用Python 2.6的方式安装PyGTK / PyGObject,而无需从源代码重新编译其中一个?
答案 0 :(得分:11)
我的工作正常,并没有给我带来太多麻烦,所以我们知道可以做到......
请记住,您可能需要在Windows计算机上安装以下所有内容:
PyCairo(http://ftp.gnome.org/pub/GNOME/binaries/win32/pycairo/)
PyGobject(http://ftp.gnome.org/pub/GNOME/binaries/win32/pygobject/)
PyGTK(http://ftp.gnome.org/pub/GNOME/binaries/win32/pygtk/)
以上3个项目的非官方 x64版本可用here - 但是,我不能保证也不推荐它们!
当然
GTK +运行时(http://ftp.gnome.org/pub/GNOME/binaries/win32/gtk+/或http://ftp.gnome.org/pub/GNOME/binaries/win64/gtk+/)
我怀疑你的情况是PyGTK库没有找到DLL所在的GTK + Runtime目录。您应该将环境变量GTK_BASEPATH设置为GTK + Runtime的目录(通常为C:\ GTK)。
现在,如果您正在尝试使用Py2EXE编译PyGTK的Python,那有点复杂,但也可以这样做......
答案 1 :(得分:4)
PyGTK一体化安装程序最近已更新:
http://ftp.gnome.org/pub/GNOME/binaries/win32/pygtk/2.22/
这将安装PyGTK,PyGObject,PyCairo,PyGtkSourceView2,PyGooCanvas,PyRsvg,gtk + -bundle和Glade。在没有DLL问题的情况下,能够成功import gobject
,import gtk
等绝对是必不可少的。
答案 2 :(得分:3)
对于64位Windows用户,请参阅
http://digitalpbk.blogspot.in/2012/03/installing-pygtk-pypango-and-pycairo-on.html
以上步骤将在64位上给出无效的DLL错误。
答案 3 :(得分:1)
在一台安装程序中查看此内容 http://aruiz.typepad.com/siliconisland/2006/12/allinone_win32_.html
答案 4 :(得分:0)
如果计划通过嵌入式解释器运行PyGTK并且C / C ++代码已经在使用GTK,请小心安装PyGTK bundle pack。 PyGTK bundle pack不会将其GTK运行时添加到PATH。
在这种情况下,C代码可能会从PATH中获取GTK(因为您可能已经安装了GTK捆绑包),而Python将使用单独的一组GTK运行时库。
因此,在我的情况下,C GUI或Python GUI用于正常运行并且在一起运行时用于冲突。
当我使用Psychopy作为我的基础python集合时,为了解决这个问题,我刚刚在Psychopy上安装了PyGTK PyGTK,Pycairo,Pygobject。
除了只使用一组GTK运行时,我必须在初始化python解释器之后通过PyGTK(而不是我的C代码中的gtk_init(&amp; argc,&amp; argv))在我的C代码中初始化GTK。