Ora*_*861 47 python cx-freeze python-3.x
当我使用时,cx_Freeze我KeyError: 'TCL_Library'在构建我的pygame程序时得到了一个keyerror .为什么我会得到这个,我该如何解决?
我的setup.py如下:
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")],
    )
Mar*_*oij 69
您可以通过手动设置环境变量来解决此错误:
set TCL_LIBRARY=C:\Program Files\Python35-32\tcl\tcl8.6
set TK_LIBRARY=C:\Program Files\Python35-32\tcl\tk8.6
您也可以在setup.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_freeze邮件列表中提到了:
我已经调查了它,不,它不只是一个简单的重新编译 - 或者它已经完成了!:-)
它正在进行中,看起来需要花费一些力气.在一些地方,处理事情喜欢里面的包扩展模块的代码被摔倒 - 这可以通过丢弃代码,迫使包的zip文件(需要被吸收的另一个拉请求)之外更好的解决.我应该在下周和接下来的一周有一些时间进一步研究这个问题.所以一切顺利,我应该在今年年底之前推出一个新版本的cx_Freeze.
但也许你有更多的运气...... 这是错误报告.
小智 35
C:\\LOCAL_TO_PYTHON\\...您可以使用__file__Python标准包的属性动态派生必要的路径,而不是使用特定于安装的绝对路径设置环境变量,如os:
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" - 至少在Windows 10上使用Python 3.5.3和cx_Freeze 5.0.1.
当您添加以下选项时,必要的DLL文件将自动从Python安装目录复制到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,
      # ...
)
小智 14
只需在setup.py的设置之前放置它
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
这对我来说很好.
小智 5
如果你使用python 3.6得到以下错误:
copying C:\LOCAL_TO_PYTHON\Python35-32\tcl\tcl8.6 -> build\exe.win-amd64-3.6\tcl
error: [Errno 2] No such file or directory: 'C:\\LOCAL_TO_PYTHON\\Python35-32\\tcl\\tcl8.6'
只需创建LOCAL_TO_PYTHONdir C:\然后Python35-32在其中创建dir.现在将tcldir从现有的Python36dir(in C:\)复制到Python35-32.
然后它工作正常.
| 归档时间: | 
 | 
| 查看次数: | 44257 次 | 
| 最近记录: |