0

我正在尝试从我用 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"))
    ]
)

任何帮助将不胜感激!我可以在需要时为您提供任何必要的信息。谢谢

更新:

好的,我实施了更改。但是,它会做一些奇怪的事情。当我使用:

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

有任何想法吗?

4

2 回答 2

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'))
于 2012-04-16T16:27:30.350 回答
-1

报告的错误是由于运行的脚本py2exe没有__file__全局。检测到这一点并sys.argv[0]在您的.py文件中使用。

于 2015-04-09T06:46:42.933 回答