Dies kann leicht mit distutils durch Unterklassen distutils.core.Command innerhalb von setup.py getan werden.
Zum Beispiel:
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')
Um den Befehl zu aktivieren, müssen Sie es in Setup-Referenz():
setup(
# stuff omitted for conciseness.
cmdclass={
'clean': CleanCommand
}
Beachten Sie, dass Sie auch auf diese Weise integrierte Befehle außer Kraft setzen können, wie zum Beispiel, was Ich habe mit 'sauber' gemacht. (Ich mochte nicht, wie die integrierte Version hinter dem ‚dist‘ links und ‚bauen‘ Verzeichnisse.)
% python setup.py --help-commands | grep clean
clean custom clean command that forcefully removes dist/build dirs.
Es gibt eine Reihe von Konventionen, die verwendet werden:
- Sie geben beliebige Befehlszeilenargumente mit user_options.
- Sie deklarieren alle Variablen, die Sie mit der Methode initialize_options() verwenden würden, die nach der Initialisierung aufgerufen wird, um Ihren benutzerdefinierten Namespace für die Unterklasse einzurichten.
- Die finalize_options() Methode heißt kurz vor run().
- Die Eingeweide des Befehls selbst werden in run() auftreten, so sicher sein, dass alle anderen Vorbereitungsarbeiten vor dem tun.
Das beste Beispiel ist die Verwendung nur für eine der Standardbefehle auf den Quellcode schauen, um bei PYTHON_DIR/distutils/command wie install.py oder build.py gefunden.
Dies beantwortet die gestellte Frage, aber virtualenv ist eine bessere Antwort auf das Problem. –