我正在尝试使用Python 2.7(使用GTK +布局)编写的程序创建一个exe文件。我已查阅过本指南:http://www.py2exe.org/index.cgi/Py2exeAndPyGTK并尝试相应地设置我的文件。我成功地创建了一个.exe文件,但是当我尝试运行它时,我收到了这个错误:
Traceback (most recent call last):
File "cipherka.py", line 183, in <module>
File "cipherka.py", line 18, in __init__
GError: Nelze otevřít soubor "C:\Repa\cipherka\dist\library.zip\gui.xml": No such file or directory
虽然我在library.zip存档中找不到gui.xml文件,但它与主.exe(cipherka.exe)文件位于同一级别。如果我自己将其复制到.zip文件中,则无法解决问题。
这是我的setup.py文件:
from distutils.core import setup
import py2exe
import glob
setup(
name="cipherka",
windows = [
{
'script': 'cipherka.py',
}
],
options = {
'py2exe': {
'packages':'encodings',
'includes': 'cairo, pango, pangocairo, atk, gobject, gio',
}
},
data_files=['gui.xml',
'README',
("modules", glob.glob("modules/*.*")),
("media", glob.glob("media/*.png"))
]
)
任何帮助都将受到高度赞赏!我可以在需要时给你任何必要的信息。 THX
好吧,我实施了改变。然而,它确实很奇怪。当我使用时:
path = os.path.dirname(__file__).replace('\\library.zip','')
从.py文件运行时有效,但在使用此错误编译时失败:
Traceback (most recent call last):
File "cipherka.py", line 217, in <module>
File "cipherka.py", line 18, in __init__
NameError: global name '__file__' is not defined
当我使用
时path = os.path.dirname('gui.xml').replace('\\library.zip','')
相反 - 程序停止从python运行,编译版本给我以下内容:
C:\Repa\cipherka\dist\cipherka.exe:188: GtkWarning: gtk_tree_path_append_index: assertion `index >= 0' failed
C:\Repa\cipherka\dist\cipherka.exe:188: GtkWarning: gtk_tree_model_get_iter: assertion `path->depth > 0' failed
Traceback (most recent call last):
File "cipherka.py", line 217, in <module>
File "cipherka.py", line 55, in __init__
File "cipherka.py", line 188, in changed_cb
IndexError: could not find tree path
有什么想法吗?
答案 0 :(得分:0)
"gui.xml"
位于"C:\Repa\cipherka\dist\"
,而不是"C:\Repa\cipherka\dist\library.zip"
,正如您的代码所假设的那样。
无论您的程序是否已编译,这都应该有效。
path = os.path.dirname(__file__).replace('\\library.zip','')
xml_file = open(os.path.join(path, 'gui.xml'))
答案 1 :(得分:-1)
报告的错误是由于在py2exe
下运行的脚本没有全局__file__
。检测到这一点,然后在sys.argv[0]
文件中使用.py
。