python - KeyError: 'TCL_Library' जब मैं cx_Freeze का उपयोग करता हूं




python-3.x cx-freeze (5)

आप मैन्युअल रूप से पर्यावरण चर सेट करके इस त्रुटि के आसपास काम कर सकते हैं:

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 मेलिंग सूची में इसका उल्लेख किया गया था :

मैंने इसे पहले ही देख लिया है और नहीं, यह सिर्फ एक सरल recompile नहीं है - या यह पहले से ही किया गया होगा! :-)

यह प्रगति पर है और ऐसा लग रहा है कि इसमें थोड़ा प्रयास करना होगा। संकुल के अंदर एक्सटेंशन मॉड्यूल जैसी चीजों को संभालने के लिए कोड में से कुछ गिर रहा है - और उस कोड को छोड़ने और ज़िप फ़ाइल के बाहर पैकेज को मजबूर करने से बेहतर हल हो सकता है (एक और पुल अनुरोध जिसे अवशोषित करने की आवश्यकता है)। मुझे अगले सप्ताह में कुछ समय और अगले सप्ताह इस पर ध्यान देना चाहिए। तो अच्छी तरह से काम करने वाली सभी चीजें मुझे वर्ष के अंत से पहले cx_Freeze का एक नया संस्करण देना चाहिए।

लेकिन शायद आपके पास अधिक भाग्य है ... यहां बग रिपोर्ट है

जब मैं cx_Freeze उपयोग cx_Freeze हूं तो मुझे एक कुंजीर मिलता है KeyError: 'TCL_Library' मेरे pygame प्रोग्राम को बनाते समय KeyError: 'TCL_Library' । मुझे यह क्यों मिलता है और मैं इसे कैसे ठीक करूं?

मेरा 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")],
    )

इसे सेटअप करने से पहले 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

इसने मेरे लिए ठीक काम किया।


यदि आप अजगर 3.6 के साथ निम्नलिखित त्रुटि प्राप्त करते हैं:

प्रतिलिपि C:\LOCAL_TO_PYTHON\Python35-32\tcl\tcl8.6 -> build\exe.win-amd64-3.6\tcl त्रुटि: [Errno 2] No such file or directory: 'C:\\LOCAL_TO_PYTHON\\Python35-32\\tcl\\tcl8.6'

बस C: \ में LOCAL_TO_PYTHON dir बनाएँ: इसके बाद Python35-32 dir बनाएँ। अब मौजूदा Python36 dir (C :) में Python35-32 से tcl dir कॉपी करें।

तब यह ठीक काम करता है।

** मैं इस कदम किया और निर्माण dir में एक .exe फ़ाइल बनाया है, लेकिन अगर मैं app क्लिक करने की कोशिश स्क्रीन पर त्वरित रूप से त्वरित प्रतीक्षा नहीं है, यहाँ मेरे कोड **

from tkinter import *
import socket



window=Tk()
window.geometry("400x150")
window.title("IpConfiger")
window.config(background="black")

def goster():
    x=socket.gethostbyname(socket.gethostname())
    label=Label(window,text=x,fg="green",font=("Helvetica",16))
    label.pack()
def information():
    info=Label(window,text="Bu program anlık ip değerini 
    bastırır.",fg="green",font=("Helvetica",16),bg="black")
    info.pack()


information()
tikla=Button(window,text="ip göster",command=goster)

tikla.pack()

यदि आप अजगर 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'

बस C:\ में LOCAL_TO_PYTHON dir बनाएँ C:\ इसके बाद Python35-32 dir बनाएँ। अब Python36 मौजूदा Python36 dir ( C:\ ) से tcl dir की प्रतिलिपि बनाएँ।

तब यह ठीक काम करता है।


C:\\LOCAL_TO_PYTHON\\... जैसे इंस्टॉलेशन विशिष्ट निरपेक्ष रास्तों का उपयोग करके पर्यावरण चर स्थापित करने के बजाय C:\\LOCAL_TO_PYTHON\\... आप os के साथ पायथन मानक पैकेज के __file__ विशेषता का उपयोग करके गतिशील रूप से आवश्यक पथ भी प्राप्त कर सकते हैं:

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 नहीं मिला त्रुटि" जब आप इसे निष्पादित करने का प्रयास करेंगे - कम से कम पायथन 3.5.3 और cx_Freeze 5.0 के साथ विंडोज 10 पर।

जब आप निम्नलिखित विकल्प जोड़ते हैं, तो आवश्यक DLL- फाइलें स्वचालित रूप से पायथन-इंस्टॉलेशन डायरेक्टरी से 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,
      # ...
)