मैं, कैसे PyInstaller साथ गतिशील/छिपा आयात लोड करने के लिए यह पता लगाने की कोशिश कर रहा हूँ अब तक मैं इस सरल संरचना है:PyInstaller के चश्मा में डायनामिक पायथन मॉड्यूल कैसे जोड़ें?
सबसे पहले, मैं एक रूपरेखा पैकेज d:\Sources\personal\python\framework
कि पैकेज मेरी अजगर परियोजनाओं के कई द्वारा प्रयोग किया जाता है, विशेष रूप से, यह आसान परियोजना नीचे मैं
Main project
├───data <- Pure static data
├───plugins <- Dynamic modules which uses framework's modules
├───resources <- Static data+embedded (generated by pyqt), used by plugins
│ ├───css
│ ├───images
| resources.py
| resources.qrc
main.py <- Uses framework's modules to load plugins dynamically
मेरे कल्पना फ़ाइल पैकेज करना चाहते हैं इस तरह दिखता है के साथ प्रयोग किया जाता है समस्या
आता है जब मैं विश्लेषण करने के लिए छिपा आयात जोड़ने की कोशिश (..., hiddenimports = [], ...) के hiddenimports सूची, मैं अब तक इस की कोशिश की है:
hiddenimports=['d:\\sources\\personal\\python\\pyqt\\plugins']
hiddenimports=['d:\\sources\\personal\\python\\pyqt\\plugins\\*']
hiddenimports=['plugins']
इसके अलावा निरपेक्ष पथ के साथ के रूप में अलग-अलग फ़ाइलों को सूचीबद्ध करने की कोशिश की:
hiddenimports=[
'd:\\sources\\personal\\python\\pyqt\\pyshaders\\plugins\\api.py',
'd:\\sources\\personal\\python\\pyqt\\pyshaders\\plugins\\config.py',
'd:\\sources\\personal\\python\\pyqt\\pyshaders\\plugins\\plugins_actions.py',
'd:\\sources\\personal\\python\\pyqt\\pyshaders\\plugins\\plugins_dialogs.py',
'd:\\sources\\personal\\python\\pyqt\\pyshaders\\plugins\\plugins_docks.py',
'd:\\sources\\personal\\python\\pyqt\\pyshaders\\plugins\\plugins_post_init.py',
'd:\\sources\\personal\\python\\pyqt\\pyshaders\\plugins\\plugins_toolbar.py'
]
और भी मॉड्यूल संकुल के रूप में उन्हें लोड करने के लिए (प्लगइन्स फ़ोल्डर में __init__.py
जीवन)
hiddenimports=[
'plugins.api',
'plugins.config',
'plugins.plugins_actions',
'plugins.plugins_dialogs',
'plugins.plugins_docks',
'plugins.plugins_post_init',
'plugins.plugins_toolbar'
]
इसके अलावा collect_submodules इन प्रयासों में से
hiddenimports=collect_submodules('plugins')
कोई भी काम किया है और फ़ोल्डर प्लगइन 'isn की कोशिश की कोशिश की टी को ठीक से जोड़ा जा रहा है (जब मैं 'ठीक से' कहता हूं, मुझे लगता है कि पाइंस्टॉलर इन छिपे हुए प्लगइन द्वारा उपयोग की जाने वाली आयातों को पुन: सक्रिय रूप से उनकी निर्भरताओं और * .pyc फ़ाइलों की प्रतिलिपि बनाने के लिए उपयोग करेगा) ... तो, मैं जानना चाहता हूं कि कैसे क्या मैं विज्ञापन कर सकता हूँ डी ठीक से "छुपा" मॉड्यूल जो पाइंस्टॉलर के spec को गतिशील रूप से लोड किया जा रहा है।
आप ['TOC'] का उपयोग कर [' pure'] (https://pythonhosted.org/PyInstaller/spec-files.html#spec-file-operation) निर्भरताओं में फ़ाइलों को जोड़ने का प्रयास कर सकते हैं (https: //pythonhosted.org/PyInstaller/advanced-topics.html#toc-class-table-of-contents)। – Repiklis
संभावित रूप से यह मार रहा है (https://github.com/pyinstaller/pyinstaller/issues/2009) समस्या? –
क्या आपने PyInstaller hooks (https://pyinstaller.readthedocs.io/en/stable/hooks.html) का उपयोग करने का प्रयास किया था? वे बिल्कुल उस उद्देश्य के लिए डिजाइन किए गए हैं। – void