gpt4 book ai didi

python - 为什么当我运行调用 B.exe 的 A.exe 时失败,因为 B.exe 尝试在 A.exe(调用者)文件夹而不是 B.exe 文件夹(调用者)中查找其模块?

转载 作者:太空宇宙 更新时间:2023-11-03 21:17:37 29 4
gpt4 key购买 nike

当我从 A.exe(位于 c:/my_software/FOLDER_A/A.exe)运行 B.exe(位于 c:/my_software/FOLDER_B/B.exe)时,两者均使用 cx_Freeze 构建,B.exe当需要在 B.exe 文件夹中搜索时,(被调用者)尝试在 A.exe 文件夹(调用者)中查找他的模块(例如 IMAGE_B.png)。我认为这是由于 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 子目录中,而主脚本本身将被卡住。卡住在构建目录本身中。您可能需要相应地修改上面的代码示例。

关于python - 为什么当我运行调用 B.exe 的 A.exe 时失败,因为 B.exe 尝试在 A.exe(调用者)文件夹而不是 B.exe 文件夹(调用者)中查找其模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54565023/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com