2009-11-18 15 views
29

मुझे अपने स्वयं के निर्माण तंत्र का उपयोग करके ICU संकलित करने की आवश्यकता है। इसलिए सवाल:मैं setup.py में मेकफ़ाइल कैसे चला सकता हूं?

मैं setup.py से मेकफ़ाइल कैसे चला सकता हूं? जाहिर है, मैं केवल निर्माण प्रक्रिया के दौरान इसे चलाने के लिए चाहता हूं, इंस्टॉल करते समय नहीं।

उत्तर

33

विधि मैं सामान्य रूप से उपयोग प्रश्न में आदेश ओवरराइड करने के लिए है:

from distutils.command.install import install as DistutilsInstall 

class MyInstall(DistutilsInstall): 
    def run(self): 
     do_pre_install_stuff() 
     DistutilsInstall.run(self) 
     do_post_install_stuff() 

... 

setup(..., cmdclass={'install': MyInstall}, ...) 

यह ले लिया मुझे distutils दस्तावेज़ीकरण और स्रोत से पता लगाने में काफी समय लगता है, इसलिए मुझे आशा है कि यह आपको दर्द बचाएगा।

नोट: आप नए आदेश जोड़ने के लिए इस cmdclass पैरामीटर का भी उपयोग कर सकते हैं।

+1

उत्तर के लिए धन्यवाद। मुझे दर्द बचाता है? क्रमबद्ध करें, मैंने इस उत्तर को देखने के लिए पहले से ही बहुत अधिक समय बिताया है ... –

+6

इस उत्तर को पढ़ने के बाद मैंने कुछ समान लागू किया है और यह काफी अच्छा काम करता है (https://github.com/Turbo87/py-xcsoar/blob /master/setup.py)। कोड एक मेकफ़ाइल चलाता है जो दो निष्पादन योग्य बनाता है और संशोधित setup.py तब भी इन निष्पादन योग्य को सिस्टम पर स्थापित करता है। किसी भी प्रकार की लाइब्रेरी को स्थापित करने के लिए भी संभव होगा। – TBieniek

+0

ध्यान दें कि यह पीआईपी के साथ अच्छी तरह से खेलना प्रतीत नहीं होता है, हालांकि यदि आप 'distutils.command.install' को' setuptools.command.install' में बदलते हैं, तो यह http://stackoverflow.com/questions/15853058/ से लिया जाता है रन-कस्टम-टास्क-कब-कॉल-पीआईपी-इंस्टॉल – wxs

1

यदि आप पाइथन एक्सटेंशन बना रहे हैं तो आप distutils/setuptools एक्सटेंशन का उपयोग कर सकते हैं। उदाहरण के लिए:

from setuptools import Extension 
# or: 
# from distutils.extension import Extension 
setup(... 
     ext_modules = [Extension("pkg.icu", 
           ["icu-sqlite/icu.c"]), 
        ] 
    ) 

वहाँ विकल्प, एक्सटेंशन का निर्माण डॉक्स को देखने के लिए की बहुत सारी कर रहे हैं: http://docs.python.org/distutils/setupscript.html

+0

यह एक ऐसा एक्सटेंशन नहीं है जिसे मैं बनाना चाहता हूं लेकिन केवल एक सी लाइब्रेरी जो पाइथन से जुड़ी नहीं होगी। (यह sqlite का विस्तार है।) –

0

distutils के साथ सी पुस्तकालयों को बनाना संभव है (distutils.core.setup के पुस्तकालय पैरामीटर देखें), लेकिन आपको मेकफ़ाइल में पहले से मौजूद विकल्पों को डुप्लिकेट करना पड़ सकता है, इसलिए सबसे आसान काम संभवतः विस्तार करना है इंस्टॉल कमांड जैसा कि अन्य उत्तरों में बताया गया है और उपप्रोसेसर मॉड्यूल के साथ कॉल करें।

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