यह आसानी से distutils.core.Command sub.pyassing द्वारा distutils के साथ किया जा सकता है setup.py के अंदर।
उदाहरण के लिए:
from distutils.core import setup, Command
import os, sys
class CleanCommand(Command):
description = "custom clean command that forcefully removes dist/build directories"
user_options = []
def initialize_options(self):
self.cwd = None
def finalize_options(self):
self.cwd = os.getcwd()
def run(self):
assert os.getcwd() == self.cwd, 'Must be in package root: %s' % self.cwd
os.system('rm -rf ./build ./dist')
आदेश सक्षम करने के लिए आप इसे सेटअप में संदर्भ होना चाहिए():
setup(
# stuff omitted for conciseness.
cmdclass={
'clean': CleanCommand
}
ध्यान दें कि आप इस तरह के रूप में इस तरह से भी निर्मित आदेशों ओवरराइड कर सकते हैं, क्या मैंने 'साफ' किया था। (मैं कैसे निर्मित संस्करण 'जिले' और 'निर्माण' निर्देशिका पीछे छोड़ दिया पसंद नहीं आया।)
% python setup.py --help-commands | grep clean
clean custom clean command that forcefully removes dist/build dirs.
कि उपयोग किया जाता है सम्मेलनों की एक संख्या हैं:
- आप यह निर्दिष्ट user_options के साथ कोई भी कमांड लाइन तर्क।
- आप आरंभिक_ऑप्शन() विधि के साथ उपयोग करने वाले किसी भी चर घोषित करते हैं, जिसे सबक्लास के लिए अपना कस्टम नेमस्पेस सेट करने के प्रारंभ में प्रारंभ करने के बाद कहा जाता है।
- finalize_options() विधि रन() से ठीक पहले कहा जाता है।
- कमांड की गड़बड़ी रन() में होगी, इसलिए इससे पहले कि कोई अन्य प्रीपे काम करना सुनिश्चित करें।
सबसे अच्छा उदाहरण का उपयोग करने के लिए सिर्फ PYTHON_DIR/distutils/आदेश पर पाया डिफ़ॉल्ट से कोई एक आदेश के लिए स्रोत कोड को देखने के लिए या build.py ऐसे रूप install.py।
यह सवाल पूछा गया है, लेकिन वर्चुअलएन्व समस्या का एक बेहतर जवाब है। –