समस्या
मैं अपनी कंपनी के भीतर आंतरिक उपयोग के लिए आवेदन बनाने के लिए PyInstaller का उपयोग करने का प्रयास कर रहा हूं। स्क्रिप्ट एक काम कर रहे पायथन पर्यावरण से बहुत अच्छा काम करता है, लेकिन पैकेज में अनुवाद करते समय कुछ खो देता है।PyInstaller, कैसे एक बाहरी पैकेज कि पिप द्वारा स्थापित किया गया था से डेटा फ़ाइलों को शामिल करने के लिए?
मैं शामिल हैं और संदर्भ डेटा फ़ाइलों है कि मैं अपने आप को मेरे पैकेज में की जरूरत के लिए कैसे पता है, लेकिन मैं भी शामिल है या फ़ाइलों कि में आना चाहिए जब आयातित संदर्भित परेशानी हो रही हूँ।
मैं एक पिप-स्थापना योग्य पैकेज tk-tools कहा जाता है, जो पैनल की तरह प्रदर्शित करता है के लिए कुछ अच्छा चित्र शामिल हैं का उपयोग कर रहा (एल ई डी की तरह दिखता है)। - जो है, जहां मेरे वितरण स्थित है
DEBUG:aspen_comm.display:COM23 19200
INFO:aspen_comm.display:adding pump 1 to the pump list: [1]
DEBUG:aspen_comm.display:updating interrogation list: [1]
Exception in Tkinter callback
Traceback (most recent call last):
File "tkinter\__init__.py", line 1550, in __call__
File "aspen_comm\display.py", line 206, in add
File "aspen_comm\display.py", line 121, in add
File "aspen_comm\display.py", line 271, in __init__
File "aspen_comm\display.py", line 311, in __init__
File "lib\site-packages\tk_tools\visual.py", line 277, in __init__
File "lib\site-packages\tk_tools\visual.py", line 289, in to_grey
File "lib\site-packages\tk_tools\visual.py", line 284, in _load_new
File "tkinter\__init__.py", line 3394, in __init__
File "tkinter\__init__.py", line 3350, in __init__
_tkinter.TclError: couldn't open "C:\_code\tools\python\aspen_comm\dist\aspen_comm\tk_tools\img/led-grey.png": no such file or directory
मैं अंतिम पंक्ति में है कि निर्देशिका के भीतर देखा: समस्या यह है कि जब मैं एक pyinstaller स्क्रिप्ट, किसी भी समय है कि उन छवियों में से एक संदर्भित है बनाने के लिए, मैं कोई त्रुटि मिलती है - और पाया कि tk_tools
निर्देशिका मौजूद नहीं है।
प्रश्न
मैं कैसे आयातित संकुल की डेटा फ़ाइलों को इकट्ठा करने के लिए pyinstaller पाने के लिए?
युक्ति फ़ाइल
वर्तमान में, मेरी datas
खाली है। युक्ति फ़ाइल, pyinstaller -n aspen_comm aspen_comm/__main__.py
के साथ बनाया:
# -*- mode: python -*-
block_cipher = None
a = Analysis(['aspen_comm\\__main__.py'],
pathex=['C:\\_code\\tools\\python\\aspen_comm'],
binaries=[],
datas=[],
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
exclude_binaries=True,
name='aspen_comm',
debug=False,
strip=False,
upx=True,
console=True)
coll = COLLECT(exe,
a.binaries,
a.zipfiles,
a.datas,
strip=False,
upx=True,
name='aspen_comm')
जब मैं /build/aspen_comm/out00-Analysis.toc
और /build/aspen_comm/out00-PYZ.toc
भीतर देखो, मैं एक प्रविष्टि है जैसे कि यह tk_tools
पैकेज नहीं मिला लग रहा है कि लगता है। इसके अतिरिक्त, tk_tools
पैकेज है कि डेटा फ़ाइलों को खोजने की बात करने से पहले पूरी तरह से काम की विशेषताएं हैं, इसलिए मुझे पता है कि इसे कहीं आयातित हो रही है, मैं बस जहां पता नहीं है। जब मैं tk_tools
के लिए खोज करते हैं, मैं फ़ाइल संरचना के भीतर यह करने के लिए कोई संदर्भ पा सकते हैं।
मैं भी एक ही परिणाम के साथ --hidden-imports
विकल्प की कोशिश की है।
आंशिक समाधान
मैं 'मैन्युअली' सभी कार्यों Analysis
में datas = [('C:\\_virtualenv\\aspen\\Lib\\site-packages\\tk_tools\\img\\', 'tk_tools\\img\\')]
और datas=datas
का उपयोग कर, तो कल्पना फ़ाइल का पथ जोड़ देते हैं तो अपेक्षा के अनुरूप। यह काम करेगा, लेकिन मैं बजाय PyInstaller पैकेज डेटा ढूंढूँगा क्योंकि यह स्पष्ट रूप से स्थापित है। मैं एक समाधान की तलाश में रहूंगा, लेकिन - इस पल के लिए - मैं शायद इस गैर-आदर्श कामकाज का उपयोग करूंगा।
आप पैकेज का नियंत्रण है ...
तो फिर तुम सबपैकेज पर stringify उपयोग कर सकते हैं, लेकिन यह केवल काम करता है अगर यह अपने स्वयं के पैकेज है।
यदि मैं सही ढंग से समझता हूं, तो आप इस https://stackoverflow.com/a/31966932/4724196 जैसे समाधान के अलावा क्या चाहते हैं, 'tk_tools' निर्भरता स्थैतिक फ़ाइलों के लिए एक ऑटो डिस्कवरी विधि है, क्या यह सही है? – HassenPy
@HassenPy हां, लेकिन मुझे संदेह है कि ऑटो-डिस्कवरी पहले से ही PyInstaller पैकेज का हिस्सा है, मुझे इसके लिए सही वाक्यविन्यास नहीं मिला है। आपके द्वारा लिंक किए गए समाधान में अभी भी '.spec' फ़ाइल में कोडित स्थिर फ़ाइलों के लिए पूर्ण पथ है। मैं इस धारणा के तहत था कि 'पाइप स्थापित' पैकेज को थोड़ा प्रयास के साथ PyInstaller में खींचा जाना चाहिए, लेकिन जाहिर है ऐसा नहीं है। ध्यान देने के लिए आपको धन्यवाद! – slightlynybbled