为什么当我运行A.exe时,它调用B.EXE,失败,因为B.EXE试图找到自己的模块集成到A.exe时(主叫)文件夹而不是B.EXE文件夹(称呼)?

问题描述 投票:1回答:1

当我运行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)
python python-3.x cx-freeze
1个回答
0
投票

看到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,而主脚本本身将在构建目录本身被冻结。您可能需要相应地修改上面的代码示例。

© www.soinside.com 2019 - 2024. All rights reserved.