cx_freeze:不是目录

时间:2015-05-10 10:19:08

标签: python cx-freeze

我正在尝试在Linux上创建二进制文件(Manjaro Linux,x86_64,python 3.4)。 我的应用程序是一个用PyQt编写的GUI软件。

这是我的setup.py:

import sys
import os
from cx_Freeze import setup, Executable

# GUI applications require a different base on Windows (the default is for a
# console application).
base = None
if sys.platform == "win32":
    base = "Win32GUI"


my_data_files = ["./images/", "./journals/", "./config/"]


# Dependencies are automatically detected, but it might need fine tuning.
build_exe_options = {"packages": ["os"],
                     "excludes": [
                                  "tkinter"
                                 ],
                     'includes': [
                                  'sip',
                                  'PyQt4.QtCore',
                                  'PyQt4.QtGui',
                                  'PyQt4.QtNetwork',
                                  'PyQt4.QtSql',
                                  'scipy.sparse.csgraph._validation',
                                  'sklearn.utils.sparsetools._graph_validation',
                                  'scipy.special._ufuncs_cxx'
                                 ],
                     'include_files': my_data_files
                    }


setup(name = "guifoo",
      version = "0.1",
      description = "My GUI application!",
      options = {"build_exe": build_exe_options},
      executables = [Executable("gui.py", base=base)])

现在,我刚开始。选项中的“包含”部分是我用py2exe编译二进制文件时使用的(它工作正常,但我想要一个独特的工具来编译所有平台)。

当我用

开始编译时
python setup.py build

一切似乎都运行良好,但是当我尝试启动二进制文件时,我有这个例外:

NotADirectoryError: [Errno 20] Not a directory: '/home/djipey/Desktop/test/build/exe.linux-x86_64-3.4/library.zip/text_unidecode/data.bin'

所以我假设我的模块text_unidecode有问题,但我无法确定问题是什么。

请你帮个忙吗?

编辑:

好的,抱歉缺乏精确性,我没有复制/粘贴整个错误消息:

File "/usr/lib/python3.4/site-packages/text_unidecode/__init__.py", line 6, in <module>
    with open(_data_path, 'rb') as f:
NotADirectoryError: [Errno 20] Not a directory: '/home/djipey/Desktop/test/build/exe.linux-x86_64-3.4/library.zip/text_unidecode/data.bin'

我认为问题可能来自text_unidecode,但我不知道为什么。我在计算机上没有任何问题地安装它。

https://github.com/kmike/text-unidecode/blob/master/src/text_unidecode/init.py

编辑2: 如果我在我自己的代码中集成text-unidecode的代码(它基本上是一个单独的函数),它就可以工作。我想我知道为什么会有这个问题。在text-unidecode中,有一个名为“data.bin”的文件,其中包含text-unidecode函数使用的数据。它是库的一部分,但是当我使用cx_freeze时它不会添加到library.zip中。所以text-unidecode无效。

有一种优雅的方法可以用cx_freeze解决这个问题吗?像一个选项,将数据文件添加到library.zip?

0 个答案:

没有答案