मैंने पहले इस तरह कुछ लागू किया है ... sdist
कमांड लाइन कमांड लाइन तर्कों को संभालने और इन पर आधारित डेटा फ़ाइलों को कुशल बनाने के लिए कमांड बढ़ाया जा सकता है। यदि आप python setup.py sdist --help
चलाते हैं, तो इसमें आपकी कस्टम कमांड लाइन तर्क शामिल होंगे, जो कि अच्छा है। निम्नलिखित नुस्खा का प्रयोग करें:
from distutils import log
from distutils.core import setup
from distutils.command.sdist import sdist
class CustomSdist(sdist):
user_options = [
('packaging=', None, "Some option to indicate what should be packaged")
] + sdist.user_options
def __init__(self, *args, **kwargs):
sdist.__init__(self, *args, **kwargs)
self.packaging = "default value for this option"
def get_file_list(self):
log.info("Chosen packaging option: {self.packaging}".format(self=self))
# Change the data_files list here based on the packaging option
self.distribution.data_files = list(
('folder', ['file1', 'file2'])
)
sdist.get_file_list(self)
if __name__ == "__main__":
setup(
name = "name",
version = "version",
author = "author",
author_email = "author_email",
url = "url",
py_modules = [
# ...
],
packages = [
# ...
],
# data_files = default data files for commands other than sdist if you wish
cmdclass={
'sdist': CustomSdist
}
)
अलग-अलग 'setup.py' फ़ाइलों को क्यों नहीं बनाते? स्रोत वितरण 'sdist' के रूप में उपलब्ध है। –
@ ब्रायन: मुझे 'sdist' के बारे में पता है, धन्यवाद। मैं मध्य-स्तरीय ओपन सोर्स प्रोजेक्ट का रखरखाव कर रहा हूं, और मैं सामान्य सम्मेलनों का पालन करना चाहता हूं (जैसे एक 'setup.py' जो पैकेजिंग/इंस्टॉलिंग प्रबंधित करता है)। मैं वास्तव में एक समाधान देखना चाहता हूं जो सिर्फ एक सेटअप स्क्रिप्ट का उपयोग करता है। – Constantinius
मैं विवरण प्रदान नहीं कर सकता क्योंकि मुझे पहले ऐसी समस्या नहीं थी। एक दृष्टिकोण आपके स्वयं के 'sdist' कमांड प्रदान कर सकता है जो केवल पुराने मेटाडेटा के साथ पुराने 'sdist' को कॉल करता है जो लक्ष्य वितरण पर निर्भर करता है। वितरण को कमांड लाइन से एक विकल्प के रूप में प्रदान किया जा सकता है या 'platform.linux_distribution' का उपयोग करके उसी लक्ष्य वितरण को प्राप्त करने के लिए डिफ़ॉल्ट रूप से' setup.py' को कॉल करने में मशीन के रूप में प्रदान किया जा सकता है। – jcollado