PyInstaller:从EXE程序文件更新json文件时出现问题(在下一次重新启动中,json文件没有被更新)

2024-10-02 10:27:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在测试pyinstaller制作的EXE。 在项目文件夹中有一个名为config的文件夹,其中包含一个json文件,用户可以在其中存储他想要的所有信息-对于使用tkinter的guiim- 但最后,在我重新启动这个应用程序并重新打开json文件后,它将显示原始文件。在

我读到了关于在执行时创建一个新文件夹的文章,我把原始的json文件放在那里。但我对这个解决方案不太满意。在

如有任何帮助将不胜感激

更新:

项目结构如下:

/config
      |----config.json
/modules
      |----admin
      |----core
      |----graphwo
init.py

代码执行得很好,除了我希望用户将他们的信息保存在配置.json换句话说,在执行时间。但因为我使用的PyInstaller是--一个不允许更新配置.json文件

更新二:

另外,我有这段代码,它获取每个文件执行时的当前路径—图像、数据和json文件—应用程序需要:

^{pr2}$

当程序调用json文件进行读写时,我跟踪程序的任何步骤。但在它完成并重新启动之后,之前所做的所有更改都不会得到反映。 梅现在更清楚了?在


Tags: 文件项目用户程序文件夹信息configjson
2条回答

首先检查你指向正确的路径。某些操作系统对某些系统变量和函数调用的响应不同。在

import sys
import os
if getattr(sys,'frozen',False):
    current_path = os.path.dirname(sys.executable)
else:
    current_path = os.path.dirname(os.path.realpath(__file__))

config_json_file_path = os.path.join(current_path, 'config', 'config.json')
print config_json_file_path
import os
import sys
if getattr(sys, 'frozen', False):
    # we are running in a |PyInstaller| bundle
    base_path = sys._MEIPASS
    extDataDir = os.getcwd()
    print base_path
    print extDataDir
else:
    # we are running in a normal Python environment
    base_path = os.getcwd()
    extDataDir = os.getcwd()

sys.\u MEIPASS变量是程序运行时应用程序绑定文件的运行位置。这与应用程序所在的位置不同。为了让您的程序找到并操作这个非绑定的.json文件,我使用os.getcwd()来获取应用程序所在的文件夹。在

在操作系统getcwd()获取可执行文件所在的当前工作目录。如果.json文件位于名为config的文件夹中,并且该文件夹位于运行exe的当前工作目录中,则可以使用

ext_config = os.path.join(extDataDir, 'config', 'your.json')

相关问题 更多 >

    热门问题