当前位置: 首页 > 知识库问答 >
问题:

当我使用cx_Freeze时TCL_Library

廉博赡
2023-03-14

当我使用cx_Freeze时,我得到一个KeyErrorKeyError:'TCL_Library',同时构建我的pyplay程序。我为什么会得到这个,我该如何修复它?

我的设置。具体如下:

from cx_Freeze import setup, Executable

setup(
    name = "Snakes and Ladders",
    version = "0.9",
    author = "Adam",
    author_email = "Omitted",
    options = {"build_exe": {"packages":["pygame"],
                         "include_files": ["main.py", "squares.py",
                         "pictures/Base Dice.png", "pictures/Dice 1.png",
                         "pictures/Dice 2.png", "pictures/Dice 3.png",
                         "pictures/Dice 4.png", "pictures/Dice 5.png",
                         "pictures/Dice 6.png"]}},
    executables = [Executable("run.py")],
    )

共有3个答案

韩宜春
2023-03-14

只要把这个放在安装之前就可以了。派克

import os

os.environ['TCL_LIBRARY'] = "C:\\LOCAL_TO_PYTHON\\Python35-32\\tcl\\tcl8.6"
os.environ['TK_LIBRARY'] = "C:\\LOCAL_TO_PYTHON\\Python35-32\\tcl\\tk8.6"

并运行它:

python setup.py bdist_msi

这对我很管用。

荆哲
2023-03-14

而不是使用安装特定的绝对路径设置环境变量,如C:\\LOCAL\u TO\u PYTHON\\您还可以使用Python标准包(如os)的\uuu file\uu属性动态派生必要的路径:

import os.path
PYTHON_INSTALL_DIR = os.path.dirname(os.path.dirname(os.__file__))
os.environ['TCL_LIBRARY'] = os.path.join(PYTHON_INSTALL_DIR, 'tcl', 'tcl8.6')
os.environ['TK_LIBRARY'] = os.path.join(PYTHON_INSTALL_DIR, 'tcl', 'tk8.6')

在此修复之后,将创建可执行文件,但当您尝试执行它时,可能会出现“DLL not found error”(DLL未找到错误)——至少在Python 3.5中是这样。3和cx_冻结5.0。1在Windows 10上。

当您添加以下选项时,必要的DLL文件将自动从Python-Installation目录复制到cx-Freeze的构建输出,您应该能够运行您的Tcl/Tk应用程序:

options = {
    'build_exe': {
        'include_files':[
            os.path.join(PYTHON_INSTALL_DIR, 'DLLs', 'tk86t.dll'),
            os.path.join(PYTHON_INSTALL_DIR, 'DLLs', 'tcl86t.dll'),
         ],
    },
}

# ...

setup(options = options,
      # ...
)
拓拔高畅
2023-03-14

您可以通过手动设置环境变量来解决这个错误:

set TCL_LIBRARY=C:\Program Files\Python35-32\tcl\tcl8.6
set TK_LIBRARY=C:\Program Files\Python35-32\tcl\tk8.6

您也可以在设置中执行此操作。py脚本:

os.environ['TCL_LIBRARY'] = r'C:\Program Files\Python35-32\tcl\tcl8.6'
os.environ['TK_LIBRARY'] = r'C:\Program Files\Python35-32\tcl\tk8.6'

setup([..])

但是我发现实际运行这个程序是行不通的。在cx_冻结邮件列表中提到:

我已经研究过了,不,这不仅仅是一个简单的重新编译——或者它已经完成了!:-)

它正在进行中,看起来需要一点努力。一些用来处理包内扩展模块之类的事情的代码正在崩溃——最好的解决办法是删除这些代码,并将包强制放在zip文件之外(另一个需要吸收的拉取请求)。下周和下周我应该有时间进一步研究这个问题。所以一切进展顺利,我应该在年底前发布一个新版本的cx_Freeze。

但也许你有更多的运气。。。这是错误报告。

 类似资料:
  • cx_Freeze 是一组脚本和模块用来将 Python 脚本封装成可执行程序,类似 py2exe 和 py2app 。不同的是,cx_Freeze 是跨平台的,要求 Python 2.3 或更新版本。

  • 问题内容: 当使用cx_Freeze和Tkinter时,出现以下消息: 注意事项: 我想使用Python 3+(当前使用3.5.3,32位)。不管实际如何,都不在乎特定版本。 我的项目有多个文件需要编译。据我所知,这让我留下了cx_Freeze或Nuitka。努伊特卡有自己的问题。 我正在使用Windows 10家庭版64位 这是我当前的setup.py: 我已经尝试了来自互联网各个角落的许多解决

  • 系统:Ubuntu 16.04 Bazel:0.4.5 TensorFlow:cpu版本r1.0 gcc版本:(Ubuntu 5.4.0-6Ubuntu1~16.04.4)5.4.0 201 60609 bazel build-c opt//tensorflow/contrib/android:libtensorflow_inference.so\

  • 所以我只想使用谷歌云视觉应用编程接口从图像中检测文本或标签。但是当我运行这段代码时,我总是得到: 但我不知道为什么。。。下面是我得到的完整json输出: 我的测试代码如下: 所以问题是。。此代码有什么问题?

  • 我知道,当我不知道列名时,使用apply或不同的方法可以获得最小值。但是,我想知道dplyr mutate函数是否能够在没有已知列名的情况下做到这一点。 谢谢你,

  • 我正在使用spring-kafka-2.2.7。RELEASE并尝试在方法级别使用@KafkaListener与ConvoltKafkaListenerContainerFactory一起创建一个消费者。根据我的理解,这将创建一个ConvoltMessageListenerContainer。 > 如果我有两种不同的方法使用@KafkaListener来消费两个不同的主题,它会创建两个Contop