2009-07-20 7 views
7

मैं सामान्य रूप से पाइथन के लिए बहुत नया हूं, लेकिन मैंने पायथन 2.6/wxPython 2.8 में एक ऐप बनाया है जो इसे पाइथन के माध्यम से चलाने पर पूरी तरह से काम करता है। लेकिन मैं एक कदम आगे जाना चाहता था और इसे विंडोज निष्पादन योग्य के रूप में तैनात करने में सक्षम होना चाहता था, इसलिए मैं py2exe को आजमा रहा हूं। लेकिन मैं इसे काम करने में सक्षम नहीं हूं। यह हमेशा एक exe संकलित करेगा, लेकिन जब मैं वास्तव में चलाने की कोशिश करता हूं कि यह कुछ गुप्त त्रुटि संदेश छालता है। पहले तो वे सरल और कहा कि यह निश्चित DLLs नहीं पा सके, लेकिन यह सब DLLs यह चाहते थे देने के बाद भी, यह अब रिटर्न इस संदेशों थे:मैं एक py2exe 'अनुप्रयोग को ठीक से शुरू करने में विफल कैसे हुआ? त्रुटि?

The application failed to initialize properly (0xc0000142). 
Click OK to terminate the application. 

तो मैं चीजों को खराब हो गई और सिर्फ एक बहुत, बहुत बनाया WxPython का उपयोग करने के लिए सरल एप्लिकेशन यह देखने के लिए कि क्या यह काम करेगा, या अगर मेरे मूल ऐप की कुछ और जटिल विशेषताएं रास्ते में आ रही हैं। लेकिन यहां तक ​​कि मेरे सरल परीक्षण ने भी एक ही त्रुटि लौटा दी।

import wx 

class MainWindow(wx.Frame): 

    def __init__(self, parent, id, title): 
     wx.Frame.__init__(self, parent, wx.ID_ANY, title, style=wx.DEFAULT_FRAME_STYLE^wx.MAXIMIZE_BOX) 
     panel = wx.Panel(self, -1, style = wx.TAB_TRAVERSAL | wx.CLIP_CHILDREN | wx.FULL_REPAINT_ON_RESIZE) 
     main_sizer = wx.BoxSizer(wx.VERTICAL) 

     testtxt = wx.StaticText(panel, -1, label='This is a test!') 
     main_sizer.Add(testtxt, 0, wx.ALIGN_CENTER) 

     panel.SetSizerAndFit(main_sizer) 
     self.Show(1) 
     return 

app = wx.PySimpleApp() 
frame = MainWindow(None, -1, 'Test App') 
app.MainLoop() 

और यहाँ है py2exe सेटअप स्क्रिप्ट मैं प्रयोग किया है::

#!/usr/bin/python 

from distutils.core import setup 
import py2exe 

manifest = """ 
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" 
manifestVersion="1.0"> 
<assemblyIdentity 
    version="0.64.1.0" 
    processorArchitecture="x86" 
    name="Controls" 
    type="win32" 
/> 
<description>Test Program</description> 
<dependency> 
    <dependentAssembly> 
     <assemblyIdentity 
      type="win32" 
      name="Microsoft.Windows.Common-Controls" 
      version="6.0.0.0" 
      processorArchitecture="X86" 
      publicKeyToken="6595b64144ccf1df" 
      language="*" 
     /> 
    </dependentAssembly> 
</dependency> 
</assembly> 
""" 

setup(
    windows = [ 
     { 
      "script": "testme.py", 
      "icon_resources": [(1, "testme.ico")], 
      "other_resources": [(24,1, manifest)] 
     } 
    ], 
    data_files=["testme.ico"] 

)

तब मैं python setup.py py2exe चलाने के लिए, यह EXE फ़ाइल उत्पन्न करता है के बारे में चेतावनी देते हैं, यहाँ साधारण परीक्षण स्क्रिप्ट के लिए कोड है कुछ डीएलएल फाइलें (जिन्हें बाद में मैं डिस्ट डायरेक्टरी में कॉपी करता हूं), लेकिन फिर जब मैं EXE चलाने की कोशिश करता हूं, तो मुझे तुरंत त्रुटि उद्धृत होती है।

+1

-1: भयानक प्रश्न शीर्षक। शायद यह होना चाहिए: "मैं एक py2exe डीबग कैसे करूं 'एप्लिकेशन ठीक से' त्रुटि 'शुरू करने में विफल रहा? –

+1

शीर्षक के बारे में क्षमा करें, एसएलॉट। अब बदल दिया गया है। – SoaperGEM

उत्तर

10

ध्यान दें कि विजुअल सी ++ 2008 पुनर्वितरण योग्य पैकेज का बाद का संस्करण है: SP1। हालांकि, एसपी 1 और पहले की रिलीज दोनों डीएलएल को पथ में स्थापित नहीं करते हैं।डाउनलोड पृष्ठ कहते हैं (मेरे जोर):

This package installs runtime components of C Runtime (CRT), Standard C++, ATL, MFC, OpenMP and MSDIA libraries. For libraries that support side-by-side deployment model (CRT, SCL, ATL, MFC, OpenMP) they are installed into the native assembly cache, also called WinSxS folder, on versions of Windows operating system that support side-by-side assemblies.

आप शायद %WINDIR%\WinSxS फ़ोल्डर में और path.What मुझे लगता है कि आप प्रासंगिक DLLs के लिए प्रकट जानकारी को शामिल करने की जरूरत है में नहीं इन फ़ाइलों को मिलेगा (%WINDIR%\WinSxS\Manifests में मिला) आपके setup.py में। मैं निम्न अनुभाग कहा:

<dependency> 
    <dependentAssembly> 
     <assemblyIdentity 
      type="win32" 
      name="Microsoft.VC90.CRT" 
      version="9.0.30729.4918" 
      processorArchitecture="X86" 
      publicKeyToken="1fc8b3b9a1e18e3b" 
      language="*" 
     /> 
    </dependentAssembly> 
</dependency> 
तुरंत मौजूदा <dependency> अनुभाग के बाद

, और exe पुनर्निर्माण: यह समस्याओं के बिना भाग गया। नोट: आपके द्वारा इंस्टॉल की गई विज़ुअल सी ++ फ़ाइलों के बिल्कुल संस्करण के आधार पर, उपर्युक्त जानकारी बिल्कुल सही नहीं हो सकती है। आपके सिस्टम पर प्रकट होता है को देखो और प्रयोग सही version, publicKeyToken आदि

वैकल्पिक रूप से, कैसे (के रूप में वे पहले से ही लक्ष्य सिस्टम पर मौजूद संभालने के खिलाफ) अपने आवेदन के साथ DLLs को तैनात करने के लिए this answer को देखो। ओह ... मैं देख रहा हूँ आपको लगता है कि मूल प्रश्न ;-)

+0

उस '' को जोड़कर यह किया! आपको बहुत - बहुत धन्यवाद! – SoaperGEM

+0

वैसे, एक डीएलएल फ़ाइल दी गई, आप इसके लिए सार्वजनिक KeyToken कैसे पा सकते हैं? उदाहरण के लिए, मेरे पास वास्तव में ऊपर डीएलएल का संस्करण 9.0.3072 9 .1 है; मैं इसके लिए उचित सार्वजनिक KeyToken प्राप्त करने के बारे में कैसे जाना होगा? – SoaperGEM

+2

मैनिफ़ेस्ट निर्देशिका में देखें जो मैंने पहले निर्दिष्ट विशिष्ट मैनिफेस्ट के लिए उल्लेख किया था। –

0

मैंने पहले py2exe का उपयोग किया है और मैं इस तरह एक स्थिति के पार चला कभी नहीं किया है ....

हालांकि, यह निर्भरता लापता की तरह लगता है आपकी समस्या हैं .....

करता है पैक किया गया प्रोग्राम आपकी मशीन पर काम करता है लेकिन दूसरों पर नहीं?

यदि ऐसा है, तो दोनों मशीनों पर पैक किए गए एप्लिकेशन को DEPENDS (निर्भरता वॉकर) के भीतर चलाएं और उम्मीद है कि कौन से पैकेज शामिल नहीं किए गए हैं।

गुड लक

+0

"पैक किए गए प्रोग्राम" से आपका मतलब जेनरेटेड एक्सई है? या सिर्फ पायथन के माध्यम से सीधे स्क्रिप्ट चल रहा है? वैसे भी, अगर मैं कमांड लाइन से 'python testme.py' चलाता हूं, तो यह ठीक काम करता है। लेकिन py2exe के माध्यम से इसे चलाने का बिंदु यह है कि मैं इसे कंप्यूटर पर तैनात करने में सक्षम होना चाहता हूं * * पाइथन स्थापित नहीं है। लेकिन अभी यह * किसी * कंप्यूटर, पायथन या नहीं पर काम नहीं कर रहा है, जब मैं इसे py2exe से संकलित करता हूं। – SoaperGEM

+0

पैक किया गया प्रोग्राम = जेनरेटेड एक्सई। एक्सई को उस मशीन पर ठीक चलाना चाहिए जो इसे उत्पादित करता है। भारित पुस्तकालयों की स्पष्ट सूची देखने के लिए उस मशीन पर निर्भरता वॉकर के साथ इसे चलाएं। फिर घूमें और ऐसा करने वाली मशीन पर ऐसा करें। अंतर आपको समाधान के लिए इंगित करेगा। – CMB

+0

यह सब मेरे साथ था ... पैक किया गया प्रोग्राम * उस मशीन पर ठीक नहीं चलता है जिसने इसे बनाया है। इसलिए शीर्षक। – SoaperGEM

0

आप .dlls इसके बारे में शिकायत की सभी कॉपी करने के लिए नहीं जा सकते! उनमें से कुछ विंडोज सिस्टम फाइलें हैं, और वे सिस्टम पर सही जगहों पर मौजूद हैं। यदि आप उन्हें दूरस्थ फ़ोल्डर में कॉपी करते हैं, तो चीजें सही तरीके से काम नहीं करेंगी।

सामान्य रूप से, आप केवल अपने आवेदन के लिए विशिष्ट .dlls कॉपी करना चाहते हैं। सिस्टम नहीं। डीएलएस। कुछ परिस्थितियों में आपको सिस्टम पर MSVC रनटाइम प्राप्त करने के लिए अपने इंस्टॉलर में vcredist_xx.exe को शिप करने की आवश्यकता हो सकती है। आपको कभी भी उन डीडीएस फाइलों को "कच्चे" को शिप करने की कोशिश नहीं करनी चाहिए। रेडिस्ट पैकेज का प्रयोग करें, यह आपको समय और निराशा बचाएगा।

क्या आपने यहां दिशानिर्देशों का पालन करने का प्रयास किया है: http://wiki.wxpython.org/SmallApp?

+0

मैंने उन दिशाओं की कोशिश की, और यहां क्या हुआ। 1. 'python setup.py py2exe --icon = SmallApp.ico' चलाने का प्रयास किया, यह त्रुटि मिली:' त्रुटि: विकल्प - पहचान मान्यता नहीं है '। 2. 'python setup.py py2exe' चलाने का प्रयास किया, यह त्रुटि मिली:' त्रुटि: setup.cfg में त्रुटि: कमांड 'py2exe' में ऐसा कोई विकल्प नहीं है 'version_legalcopyright''। 3. setup.cfg फ़ाइल को हटा दिया गया और 'python setup.py py2exe' को पुनः चलाने की कोशिश की, py2exe * ठीक * चलाने के लिए * दिखाई दिया, इसने फाइलों के साथ निर्माण और dist निर्देशिका बनाई - सिवाय इसके कि इसमें एक EXE फ़ाइल नहीं बनाई गई जिले! (केवल w9xpopen.exe के अलावा, जो कुछ भी नहीं करता है) – SoaperGEM

+0

4. सेटअप को संशोधित किया गया।निर्देशों में पाई फ़ाइल इसके बजाय यहां प्रश्न में ऊपर पोस्ट किए गए एक से मेल खाता है ('testme' से' smallapp' में बदले गए संदर्भों को छोड़कर), और यह ठीक से संकलित किया गया है, एक EXE जुर्माना बनाया गया है, लेकिन इसे बनाए गए EXE बिल्कुल वही है त्रुटि: आवेदन ठीक से शुरू करने में विफल रहा। – SoaperGEM

+0

यह सुनिश्चित नहीं है कि यह मामला तब था जब उत्तर पोस्ट किया गया था, लेकिन अब तक वीसी पुनर्वितरण योग्य डीएल को सिस्टम फाइल नहीं माना जाता है और उन्हें उपयोग करने वाले अनुप्रयोगों के साथ साइड-बाय-साइड वितरित किया जाना चाहिए: http://support.microsoft .com/kb/326922 – hexedpackets

0

क्या आप वाकई वही डीएलएस देते हैं जो WxPython द्वारा उपयोग किया जाता है।

wxpython द्वारा उपयोग किए गए वीसी ++ डीएलएस wxpython डाउनलोड पेज से डाउनलोड किया जा सकता है। क्या आपने इन कोशिश की?

+0

जब मैं डीएलएल की प्रतिलिपि किए बिना EXE चलाने की कोशिश करता हूं, तो मुझे वास्तव में यह त्रुटि मिलती है: यह एप्लिकेशन प्रारंभ करने में विफल रहा है क्योंकि MSVCR90.dll नहीं मिला था। एप्लिकेशन को पुन: इंस्टॉल करने से इस समस्या को ठीक हो सकता है। फिर मैं msvcr90.dll को दूरस्थ फ़ोल्डर में कॉपी करता हूं और ऊपर वर्णित त्रुटि "एप्लिकेशन को ठीक से प्रारंभ करने में विफल" प्राप्त करता हूं। AFAIK, यह डीएलएल वीसी ++ पैकेज से है। – SoaperGEM

+0

क्या आपने विजुअल सी ++ पुनर्वितरण पैकेज भी स्थापित किया था? – luc

+0

हां मैंने किया - विशेष रूप से मैंने [2008 पैकेज] स्थापित किया है (http://www.microsoft.com/downloads/details.aspx?FamilyID=9b2da534-3e03-4391-8a4d-074b9f2bc1bf&displaylang=en) इससे पहले कि मैंने इसे पोस्ट किया सवाल। – SoaperGEM

1

आपका प्रश्न था पूछा: मैं कैसे डीबग करूँ py2exe

यहाँ एक टिप है:

आपकी विशिष्ट समस्या के लिए, मुझे उम्मीद है कि आपको एक ही समस्या से निपटने वाले इस पूरे पूर्ण धागे पर समाधान मिलेगा:

py2exe fails to generate an executable

संबंधित मुद्दे