如何让编译好的可执行文件写入数据?

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

前段时间我开始开发一些软件。为了使软件正常工作,我需要代码将数据写入不同的 python 文件。我实现的数据写入和打开命令是:

import sys
sys.path.append('path_to_python_files')
from pythonproject import *
var1 = open('pythonproject.py',w)
var1.write(str('something'))
var1.close()

之后我使用 PyInstaller 将 .py 项目转换为可执行文件。最后我得到了可执行格式的代码。尽管该代码过去总是并且仍然以可视代码形式工作,但它的 .exe 文件不会写入任何数据。最重要的是,我终于用 Inno 和 InstallForge 编译了整个包。两者都创建了无法打开的文件。我搞砸了什么?我花了几个小时编写这个软件,最终让它变成了一些奇怪的 bug .exe。我真的很感激有人的见解。

(我的期望是代码会改变 python 文件的状态,但这只有在可视化代码中才是事实,其中 python 文件与软件 python 文件位于同一目录中。 附: 我确实尝试在转换为 .exe 后将 .exe 文件和额外的 python 文件放在同一目录中,并使用“from . import Something”方法,但这也不起作用。)

python upload save pyinstaller install-forge
1个回答
0
投票

Python 代码中的文件和目录以及 PyInstaller 生成的可执行文件的处理似乎存在一些混乱。让我们尝试看看这是否可以解决问题。在您的代码中,您使用“w”作为打开文件的模式。但是,写入文件的正确模式是“w”,而不是“w”。模式“w”应该会导致错误。所以,代码应该是:

var1 = open('pythonproject.py', 'w')

当您使用 PyInstaller 创建可执行文件时,文件的路径可能会更改。确保可执行文件中指定的打开文件的路径正确。您可能需要使用 PyInstaller 提供的 sys._MEIPASS 模块来获取可执行文件的正确路径。例如:

import sys
import os

if getattr(sys, 'frozen', False):
    application_path = sys._MEIPASS
else:
    application_path = os.path.dirname(os.path.abspath(__file__))

var1 = open(os.path.join(application_path, 'pythonproject.py'), 'w')

运行可执行文件时,验证当前工作目录设置是否正确。您可以使用 os.chdir() 函数来完成此操作。添加错误检查以处理打开或写入文件时的任何异常。如果文件打开或写入出现错误,这将帮助您识别问题。在编写和运行 Python 代码以及使用 PyInstaller 构建可执行文件时,请尝试遵循这些准则。另外,请仔细检查目录和文件路径,以避免从开发环境过渡到可执行文件时出现路径错误。希望这一切能帮助您解决问题

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