मैं थोड़ा अपरंपरागत तरीके से पाइथन की डिस्ट्यूल्स 'या setuptools' सेटअप() फ़ंक्शन को कॉल करना चाहता हूं, लेकिन मुझे यकीन नहीं है कि इस तरह के उपयोग के लिए आसवन का मतलब है या नहीं।कमांड लाइन को पार्स किए बिना कमांड नाम/विकल्पों के साथ सीधे distutils 'या setuptools' setup() फ़ंक्शन को कॉल करें?
from distutils.core import setup
setup(name='Distutils',
version='1.0',
description='Python Distribution Utilities',
author='Greg Ward',
author_email='[email protected]',
url='http://www.python.org/sigs/distutils-sig/',
packages=['distutils', 'distutils.command'],
)
आम तौर पर: - (setuptools उपयोग लगभग समान है distutils डॉक्स से शब्दशः उठाया)
उदाहरण के लिए, मान लीजिए कि मैं वर्तमान में एक 'setup.py' फ़ाइल है, जो इस तरह दिखता है चलो , इस मॉड्यूल के आरपीएम के लिए बस .spec फ़ाइल बनाने के लिए, मैं python setup.py bdist_rpm --spec-only
चला सकता हूं, जो कमांड लाइन को पार करता है और RPM- विशिष्ट सामग्री को संभालने के लिए 'bdist_rpm' कोड को कॉल करता है। .spec फ़ाइल './dist' में समाप्त होती है।
मैं अपना सेटअप() आमंत्रण कैसे बदल सकता हूं ताकि यह '-spec-only' विकल्प के साथ 'bsist_rpm' कमांड चला सके, बिना पार्सिंग कमांड लाइन पैरामीटर के? क्या मैं कमांड नाम और विकल्प को सेटअप() के पैरामीटर के रूप में पास कर सकता हूं? या मैं मैन्युअल रूप से कमांड लाइन बना सकता हूं, और इसके बजाय पैरामीटर के रूप में पास कर सकता हूं?
नोट: मुझे पहले से ही पता है कि मैं ओएससिस्टम() या उपप्रोसेसर मॉड्यूल या कुछ इसी तरह का उपयोग करके, एक वास्तविक कमांड लाइन के साथ स्क्रिप्ट को एक अलग प्रक्रिया में कॉल कर सकता हूं। मैं किसी भी तरह के बाहरी कमांड आमंत्रण का उपयोग करने से बचने की कोशिश कर रहा हूं। मैं विशेष रूप से ऐसे समाधान के लिए देख रहा हूं जो वर्तमान दुभाषिया में सेटअप() चलाता है।
पृष्ठभूमि के लिए, मैं कुछ रिलीज-प्रबंधन शैल स्क्रिप्ट को एक पायथन प्रोग्राम में परिवर्तित कर रहा हूं। आगे के प्री-रिलीज परीक्षण के लिए .spec फ़ाइल जेनरेट करने के लिए कार्यों में से एक 'setup.py' चला रहा है। बाहरी कमांड के रूप में 'setup.py' चलाना, अपने कमांड लाइन विकल्पों के साथ, एक अजीब विधि की तरह लगता है, और यह शेष कार्यक्रम को जटिल बनाता है। मुझे लगता है कि एक और पाइथोनिक तरीका हो सकता है।
मुझे प्रश्न पसंद है। मेरे लिए ऐसा लगता है कि 'सेटअप()' खराब रूप से डिज़ाइन किया गया है - इसे कम से कम 'sys.argv' को कुछ जादू करने के बजाय तर्क के रूप में लेना चाहिए। पैरामीटर 'sys.argv' (जैसे' argparse' 'में भी डिफ़ॉल्ट हो सकता है, लेकिन फ़ंक्शन हस्ताक्षर में दस्तावेज और दृश्य दोनों होना चाहिए। – abukaj