2012-05-15 25 views
9

मैंने देखा है कि जब मैं विंडोज के लिए एक ज़िप रोल करने की कोशिश करता हूं तो pytz zoneinfo फ़ोल्डर को याद करता है। अभी मैं अर्थात् एक समाधान है कि मैं python setup.py build के बाद का उपयोग किया है,?cx_freeze: मैं पुस्तकालय.जिप में पैकेज फ़ाइलों को कैसे जोड़ूं?

7z a -xr!*.py* build\exe.win32-2.7\library.zip C:\Python27\Lib\site-packages\pytz 

वहाँ setup.py या कुछ और से है कि प्राप्त करने के लिए एक उचित तरीका है

+0

आप ज़िप-शामिल विकल्प का प्रयास कर सकते हैं। डॉक्स: http://cx_freeze.readthedocs.org/en/latest/distutils.html –

+0

यह विकल्प अंतिम ज़िप में फ़ाइलों को जोड़ने के लिए है यदि मैं इसे बनाता हूं। मेरे मामले में मैं पुस्तकालय.जिप के बारे में बात कर रहा हूं और पुनर्वितरण के लिए अंतिम ज़िप नहीं। मुझे त्रुटि मिल रही है: सेटअप स्क्रिप्ट में त्रुटि: कमांड 'build_exe' में ऐसा कोई विकल्प नहीं है, यदि मैं आपके सुझावों का प्रयास करता हूं। आम तौर पर वहां कोड जोड़ने के लिए _packages_ विकल्प का उपयोग होता है, लेकिन _pytz_ में केवल डेटा फ़ाइलें होती हैं और यदि मैं "पैकेज" _pytz/zoneinfo_ जोड़ने का प्रयास करता हूं तो यह विकल्प विफल हो जाता है। – mlt

+1

इसे 'zip_includes' के रूप में देने का प्रयास करें, distutils डैश/अंडरस्कोर के बारे में मजाकिया हो सकता है। मुझे लगता है कि 'ज़िप-शामिल' लाइब्रेरी.जिप के बारे में बात कर रहा है - cx_Freeze स्वचालित रूप से वितरण के लिए सब कुछ ज़िप नहीं करता है, बेशक आप इसे स्वयं कर सकते हैं। –

उत्तर

12

आप इसे ठीक कर सकता है, तो निम्न विधि जोड़ने:

build_exe_options = {"packages": ["os"], 
        "excludes": ["tkinter"], 
        "zip_includes": include_files(), 
        ... 
        } 

आशा है कि

+1

यह मेरे लिए बहुत अच्छा काम करता है, धन्यवाद! मुझे एक मामूली चिमटा बनाना पड़ा: skip_count इसके लिए आवश्यक 1 जोड़ा गया अन्यथा यह एक प्रमुख स्लैश था, जो os.path.join को पहली तर्क को उड़ाता है। – Motoma

+0

इसे हल करने के रूप में चिह्नित करें? – chwi

+0

एचएम, पायथन 3.4। जोन जानकारी 'pytz \ zoneinfo' में शामिल है लेकिन नहीं मिला – Winand

2

मैं में इस समस्या का समाधान कर लिया है में मदद करता है: setup.py फ़ाइल में

def include_files(): 
     path_base = "C:\\Python27\\Lib\\site-packages\\pytz\\zoneinfo\\" 
     skip_count = len(path_base) 
     zip_includes = [(path_base, "pytz/zoneinfo/")] 
     for root, sub_folders, files in os.walk(path_base): 
      for file_in_root in files: 
       zip_includes.append(
         ("{}".format(os.path.join(root, file_in_root)), 
         "{}".format(os.path.join("pytz/zoneinfo", root[skip_count:], file_in_root)) 
         ) 
       )  
     return zip_includes 

फिर, पाइथन 3.4 निम्नलिखित तरीके से

import pytz 
setup(
    ... 
    options = {'build_exe': 
     {'include_files': (pytz.__path__[0],), ...}, 
    }, 
) 

फिर pytz को अपने सभी समय क्षेत्रों के साथ अनजिप किया गया है