Domanda

Ho una libreria chiamata "esempio" che sto installando nella mia directory globale site-packages. Tuttavia, mi piacerebbe essere in grado di installare due versioni, una per la produzione e uno per la prova (Ho un'applicazione web e altre cose che sono di versione in questo modo).

C'è un modo per specificare, dire "fase python setup.py" che non solo installare un uovo diverso in site-packages, ma anche rinominare il modulo da "esempio" a "example_stage" o qualcosa di simile?

Se distutils non può farlo, c'è qualche altro strumento che può?

È stato utile?

Soluzione

Certo, è possibile estendere distutils con nuovi comandi. Nel file di configurazione distutil, aggiungere:

 [global]
 command-packages=foo.bar

questo può essere in distutils.cfg nel pacchetto distutils sé, ..pydistutils.cfg nella vostra home directory (nessun punto iniziale su Windows), o setup.cfg nella directory corrente.

Allora avete bisogno di un pacchetto foo.bar nella directory site-packages di Python.

Poi in quel pacchetto si aggiungono le classi di attuazione vostri nuovi comandi desiderati, come ad esempio stage, sottoclasse distutils.cmd -. la documentazione sono deboli, ma ci sono un sacco di esempi in quanto tutti i comandi Distutils esistenti sono anche costruiti in questo modo

Altri suggerimenti

Questo può facilmente essere fatto con distutils sottoclasse distutils.core.Command all'interno di setup.py.

Ad esempio:

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')  

Per abilitare il comando è necessario fare riferimento in setup ():

setup(
     # stuff omitted for conciseness.
     cmdclass={
        'clean': CleanCommand
}

Si noti che è possibile ignorare comandi incorporati in questo modo anche, come quello che ho fatto con 'pulita'. (Non mi piace come la versione built-in a sinistra dietro la 'dist' e le directory 'build'.)

% python setup.py --help-commands | grep clean
  clean            custom clean command that forcefully removes dist/build dirs.

Ci sono una serie di convenzioni che vengono utilizzati:

  • specificare tutti gli argomenti della riga di comando con user_options .
  • Si dichiara alcuna variabile si usa con le initialize_options () di metodo, che è chiamata dopo l'inizializzazione per configurare il vostro spazio dei nomi personalizzato per la sottoclasse.
  • finalize_options () metodo viene chiamato a destra prima di run () .
  • Il coraggio del comando stesso avverrà in run () in modo da essere sicuri di fare qualsiasi altro lavoro di preparazione prima di questa.

L'esempio migliore da usare è solo di guardare il codice sorgente per uno dei comandi di default si trovano a PYTHON_DIR / distutils / comando come install.py o < em> build.py .

Se si desidera utilizzare la versione più quindi virtualenv con virtualenvwrapper può aiutare

.

Si veda la risposta di Alex se volete un modo per fare questo con distutils, ma trovo Paver essere migliore per questo genere di cose. Lo rende molto più facile fare i comandi personalizzati o sovrascrivere quelli esistenti. Inoltre la transizione non è terribilmente difficile se siete abituati a Distutils o setuptools.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top