Python 为什么我运行A.exe(调用B.exe)时失败,因为B.exe尝试将其模块查找到A.exe(调用方)文件夹,而不是B.exe文件夹(调用方)?

Python 为什么我运行A.exe(调用B.exe)时失败,因为B.exe尝试将其模块查找到A.exe(调用方)文件夹,而不是B.exe文件夹(调用方)?,python,python-3.x,cx-freeze,Python,Python 3.x,Cx Freeze,当我从A.exe(位于c:/my_software/FOLDER_A/A.exe中)运行B.exe(位于c:/my_software/FOLDER_A/A.exe中)时(位于c:/my_software/FOLDER_A/A.exe中),两者都是用cx_Freeze构建的,B.exe(调用)会尝试在A.exe文件夹(调用方)中查找他的模块(例如IMAGE_B.png)。我认为这是由于cx_Freeze的setup.py中的一些错误代码造成的 我在脚本中使用函数os.getcwd()来获取每个.e

当我从A.exe(位于c:/my_software/FOLDER_A/A.exe中)运行B.exe(位于c:/my_software/FOLDER_A/A.exe中)时(位于c:/my_software/FOLDER_A/A.exe中),两者都是用cx_Freeze构建的,B.exe(调用)会尝试在A.exe文件夹(调用方)中查找他的模块(例如IMAGE_B.png)。我认为这是由于cx_Freeze的setup.py中的一些错误代码造成的

我在脚本中使用函数os.getcwd()来获取每个.exe中的根路径

这是我的setup.py,我用它来构建.exe(A和B)


请参阅
cx\u冻结
文档中的。它提供了以下代码示例:

def find_data_文件(文件名):
如果getattr(系统“冻结”,错误):
#应用程序被冻结
datadir=os.path.dirname(sys.executable)
其他:
#应用程序未被冻结
#更改此位以匹配存储数据文件的位置:
datadir=os.path.dirname(_文件__)
返回os.path.join(datadir,文件名)

还请注意,
cx\u Freeze
version 5.1.1(当前版本)将把包冻结到生成目录的
lib
子目录中,而主脚本本身将冻结在生成目录中。您可能需要相应地修改上面的代码示例

请参见
cx\u冻结
文档中的。它提供了以下代码示例:

def find_data_文件(文件名):
如果getattr(系统“冻结”,错误):
#应用程序被冻结
datadir=os.path.dirname(sys.executable)
其他:
#应用程序未被冻结
#更改此位以匹配存储数据文件的位置:
datadir=os.path.dirname(_文件__)
返回os.path.join(datadir,文件名)
还请注意,
cx\u Freeze
version 5.1.1(当前版本)将把包冻结到生成目录的
lib
子目录中,而主脚本本身将冻结在生成目录中。您可能需要相应地修改上面的代码示例

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)