从另一个 python 应用程序运行 python 脚本时出现 tcl 问题(转换为 exe)

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

我在 tkinter 中制作了一个应用程序,它有助于创建 tkinter 应用程序/脚本,(当我导出文件时,它存储为 .py)

我想从我的应用程序运行这个 .py 脚本,以便我们可以在导出后立即预览它。

我使用了

subprocess.run
方法,它在 python 应用程序中完美运行。 但是当我使用 pyinstaller 将应用程序转换为 exe 时,由于 tcl 版本错误,预览功能不起作用。

init.tcl: version conflict for package "Tcl": have 8.6.10, need exactly 8.6.9
version conflict for package "Tcl": have 8.6.10, need exactly 8.6.9
    while executing
"package require -exact Tcl 8.6.9"
    (file "C:----/_MEI170162/tcl/init.tcl" line 19)
    invoked from within
"source {C:-----/_MEI170162/tcl/init.tcl}"
    ("uplevel" body line 1)
    invoked from within
"uplevel #0 [list source $tclfile]"


This probably means that Tcl wasn't installed properly.

我尝试了

subprocess.run
subprocess.startfile
os.system
,甚至
webbroswer.open
方法来运行导出的 .py tkinter 应用程序,但显示了相同的错误。请注意,我使用旧版本的 python 编译了该应用程序,因此 tcl 版本也不同。在我的主系统中,python 版本设置为最新版本,因此子进程正在使用该 tcl 版本,但我不想与主应用程序的 tcl/python 版本有任何连接。

由于用户可能安装了不同版本的python,因此也会有不同的tcl版本,这种情况下会再次显示此错误。

我尝试了

exec(open(file).read())
方法,虽然它有效,但某些导出存在问题,例如pyimages丢失错误。

还有其他方法可以运行更独立的Python脚本吗?

python python-3.x tkinter tkinter-canvas tkinter-entry
1个回答
0
投票

终于得到答案了,我们可以在运行子进程之前删除tcl环境变量

import os
import subprocess

file_path = "C:/----/test/py"

def run_script():
    env = os.environ.copy()
    if 'TCL_LIBRARY' in env:
        del env['TCL_LIBRARY']
    if 'TK_LIBRARY' in env:
        del env['TK_LIBRARY']
    sp = subprocess.run(["python",file_path], shell=True, env=env)
© www.soinside.com 2019 - 2024. All rights reserved.