使用cx_freeze创建Python代码的可执行文件以及其他文本文件

时间:2017-09-01 18:51:48

标签: python cx-freeze

我使用Python 3.6和cx_freeze为我创建的Python游戏创建可执行文件。该游戏是一个随机句子生成器,它使用三个文本文件作为其词典。

e.g。 " names.txt中":

$.getJSON("http://EXTERNAL_DOMAIN_OR_IP_LOCATION/?param=value&callback=?",
function(data) {
    doSomethingWith(data); 
}); 

当我尝试创建构建然后运行exe时,我收到以下错误:

 def random_name():
    line_num = 0
    selected_line = ''
    with open('names.txt') as f:
        for line in f:
            line = f.readline()
            if not line: break
            line_num += 1
            if random.uniform(0, line_num) < 1:
                selected_line = line
    return selected_line.strip()

我提到代码使用单独的txt文件的原因是我认为这可能是错误的原因,尽管我不理解所有错误消息。

如果这是正确的,我如何确保cx_freeze包含这些额外的文件?

1 个答案:

答案 0 :(得分:0)

问题不是冻结,而是文件&#39; names.txt&#39;地点。您确定names.txt与.py文件位于同一位置吗?我复制了你的代码示例并运行它。它给了我同样的错误。所以我创建了一个文件names.txt,它已经工作了

更新的答案: 我的setup.py如下:

import sys
from cx_Freeze import setup, Executable

# Dependencies are automatically detected, but it might need fine tuning.
build_exe_options = {"packages": ["os"], "excludes": ["tkinter"]}

# GUI applications require a different base on Windows (the default is for a
# console application).

base = None
if sys.platform == "win32":
    base = "Win32GUI"

setup(  name = "Random Crime Generator",
        version = "1.0",
        description = "A random crime generator for police states",
        options = {"build_exe": build_exe_options},
        executables = [Executable("rcg.py", base=base)])

rcg.py如下:

import random

def random_name():
    line_num = 0
    selected_line = ''
    with open('names.txt') as f:
        for line in f:
            line = f.readline()
            if not line: break
            line_num += 1
            if random.uniform(0, line_num) < 1:
                selected_line = line
    return selected_line.strip()

对于与rcg.py位于同一文件夹中的names.txt,我只添加了以下内容:

Apple
Banana
Carrots

这就是全部,它运行良好。我是从Windows运行的。