2011-08-03 10 views
42

मैं समझता हूं कि setup.py उसी CFLAGS का उपयोग करता है जिसका उपयोग पायथन बनाने के लिए किया जाता था। मेरे पास एक सिंगल सी एक्सटेंशन है जो segfaulting है। मुझे इसे -O2 के बिना बनाने की आवश्यकता है क्योंकि -O2 कुछ मानों और कोड को अनुकूलित कर रहा है ताकि कोर फाइलें समस्या को कम करने के लिए पर्याप्त न हों।मैं कंपाइलर (जीसीसी) झंडे को ओवरराइड कैसे कर सकता हूं जो setup.py डिफ़ॉल्ट रूप से उपयोग करता है?

मुझे बस setup.py को संशोधित करने की आवश्यकता है ताकि -O2 का उपयोग नहीं किया जा सके।

मैंने distutils.ccompiler और distutils.unixcompiler में distutils दस्तावेज पढ़ा है और देखें कि झंडे और libs को जोड़ने और इसमें शामिल हैं, लेकिन डिफ़ॉल्ट जीसीसी झंडे को कैसे संशोधित करें।

विशेष रूप से, यह बैकपोर्ट्स के एक समूह के साथ पायथन 2.5.1 पर एक विरासत उत्पाद के लिए है (फेडोरा 8, हाँ, मुझे पता है ...)। नहीं, मैं ओएस या पायथन संस्करण नहीं बदल सकता और मैं बिना किसी समस्या के पाइथन को पुन: संकलित कर सकता हूं। मुझे केवल एक ग्राहक के लिए सी एक्सटेंशन का एक बंद करने की आवश्यकता है जिसका पर्यावरण केवल एक ही सीगफॉल्टिंग है।

उत्तर

56
  • प्रारंभ में लगा CFLAGS="-O0" इससे पहले कि आप setup.py चलाएँ:

    % CFLAGS="-O0" python ./setup.py 
    

    -O0CFLAGS से जोड़ दिए जाएंगे, जबकि संकलन, इसलिए पिछले -O2 सेटिंग पर आ जाएगी।

  • एक और तरीका है setup.py में extra_compile_args को -O0 जोड़ने है:

    moduleA = Extension('moduleA', ....., 
         include_dirs = ['/usr/include', '/usr/local/include'], 
         extra_compile_args = ["-O0"], 
         ) 
    
  • आप सभी डिफ़ॉल्ट झंडे को निकालना चाहते हैं, का उपयोग करें:

    % OPT="" python ./setup.py 
    
संबंधित मुद्दे