2010-01-29 4 views
9

मेरी प्रोजेक्ट की सेटअप प्रक्रिया के हिस्से के रूप में, मुझे किसी एक पैकेज को निर्दिष्ट निर्देशिका में सिमलिंक करने की आवश्यकता है ताकि init.d स्क्रिप्ट इसे पा सके। क्या इसे setup() पर पोस्ट-प्रोसेसिंग कमांड के रूप में जोड़ने का कोई तरीका है? मैं एक और फाइल बनाने के लिए भी व्यवस्थित करता हूं जो लिंक बनाता है और इसे "इन्हें चलाने" की कुछ क्वॉर्ग सूची (यदि ऐसा विकल्प मौजूद है) के हिस्से के रूप में setup() पर पास करता है।symlink (या स्क्रिप्ट चलाने) बनाने के लिए वितरण/setuptools का उपयोग करें?

setup(
    ... 
    packages = find_packages('src'), 
    package_dir = {'': 'src'}, 
    install_requires = ..., 
    data_files = [('/etc/init.d', ['scripts/foo'])], 
    ... 
) 

कि foo स्क्रिप्ट src/ से संकुल में से एक कहीं और निर्देशिका के लिए सांकेतिक रूप से लिंक किए जाने की उम्मीद है (उदाहरण के लिए नहीं बस PYTHONPATH पर हो)। क्या इसे हासिल करने का कोई तरीका है?

उत्तर

4

वर्तमान में, केवल प्लेटफ़ॉर्म-विशिष्ट पैकेज प्रबंधन टूल (जैसे RPM, deb, win32 इंस्टॉलर्स) में पोस्ट-इंस्टॉल चरणों को चलाने की क्षमता है: distutils, setuptools, आदि सीधे इसका समर्थन नहीं करते हैं। (आदि आप आरपीएम, Windows इंस्टालर का निर्माण करने के लिए अनुमति की हद तक, को छोड़कर)

तो, के बिना एक प्लेटफ़ॉर्म-विशिष्ट संस्थापक इस करने के लिए सबसे आसान तरीका है, अपना खुद का postinstall स्क्रिप्ट बनाने के लिए है, या अपनी मौजूदा स्क्रिप्ट में एक पोस्टइंस्टॉल विकल्प जोड़ें, और उपयोगकर्ताओं को इसे चलाने के लिए कहें। अन्यथा, उपयुक्त प्लेटफार्मों के लिए इंस्टॉलर बनाने के लिए आपको bdist_rpm या अन्य bdist कमांडों में से एक का उपयोग करना होगा।

0

@ pjeby के उत्तर पर विस्तार करते हुए, आप अपने स्वयं के कस्टम पोस्ट स्थापना चरणों को जोड़ने के लिए इंस्टॉल कमांड भी बढ़ा सकते हैं। हालांकि यह केवल स्रोत से स्थापित होने पर ही काम करेगा (यानी setup.py.py.py) और आरपीएम और एमएसआई जैसे अन्य इंस्टॉलर चुपचाप आपके परिवर्तनों को अनदेखा करेंगे।

संपादित: कुछ Googling के बाद यह पाया जाता है, ऐसा लगता है आप नहीं खुद के द्वारा सिमलिंक बनाने के लिए प्रयास करना चाहिए: http://docs.python.org/2/install/index.html#alternate-installation

4

मैं जानता हूँ कि इस पोस्ट कई साल पुराना है, लेकिन मैं एक अद्यतन प्रदान करना चाहता था सेटअप.py में पोस्ट-प्रोसेसिंग कोड संभव है। लंबी कहानी छोटी है, आपको setuptools के इंस्टॉल फ़ंक्शन को ओवरराइड करना होगा, लेकिन तब से आप जो भी कोड चाहते हैं उसे जोड़ सकते हैं, जैसे कि सिनिलिंक की प्रतिलिपि बनाना जो MANIFEST.in कॉपी करने से इंकार कर देता है। पीटर लमट के solution से लिया गया।

from setuptools.command.install import install 

class CustomInstallCommand(install): 
    """Customized setuptools install command - prints a friendly greeting.""" 
    def run(self): 
     print "Hello, developer, how are you? :)" 
     install.run(self) 
     #post-processing code 
setup(
    ... 
    cmdclass={ 
     'install': CustomInstallCommand, 
    }, 
    ... 
) 
+1

हेलीओ गिलेरमेम ने मुझे सूचित किया कि मेरे ब्लॉग पोस्ट का लिंक मृत था। लिंक को फिर से जिंदा बनाने के लिए मैंने आपकी पोस्ट संपादित की। मुझे खुशी है कि आपको यह उपयोगी लगता है, बीटीडब्ल्यू। – plamut

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