当我运行B.EXE(位于C:/my_software/FOLDER_B/B.exe)从A.exe时(位于C:/my_software/FOLDER_A/A.exe),均与cx_Freeze,B.EXE建(叫)试图找到自己的模块(如IMAGE_B.png,例如)在A.exe时文件夹(主叫),当它需要在文件夹B.EXE搜索。我认为这是在cx_Freeze的setup.py一些错误的代码发生所致。
我在脚本功能os.getcwd()用来获取每个.exe文件的根路径
这是我的setup.py,这是我用于构建.exe文件(A和B)
import os
from cx_Freeze import setup, Executable
import sys
os.environ['TCL_LIBRARY'] = r'c:\python\tcl\tcl8.6'
os.environ['TK_LIBRARY'] = r'c:\python\tcl\tk8.6'
buildOptions = dict(packages = ["tkinter","os"],
excludes = [],
include_files [r'c:\python\DLLs\tcl86t.dll',
r'c:\python\DLLs\tk86t.dll',
'A.png','icono.ico'])
executables = [Executable('A.py',
base="Console",
icon = "icono.ico")]
setup(name='A',version = '1',
description = 'program A',
options = dict(build_exe = buildOptions),
executables = executables)
看到cx_Freeze
文档how to use data files。它提供了以下的代码示例:
def find_data_file(filename):
if getattr(sys, 'frozen', False):
# The application is frozen
datadir = os.path.dirname(sys.executable)
else:
# The application is not frozen
# Change this bit to match where you store your data files:
datadir = os.path.dirname(__file__)
return os.path.join(datadir, filename)
还请注意,cx_Freeze
版本5.1.1(当前版本)将冻结封装到生成目录的子目录lib
,而主脚本本身将在构建目录本身被冻结。您可能需要相应地修改上面的代码示例。