我正在尝试在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?