Come posso assegnare un numero di versione per un pacchetto Python usando SVN e distutils?

StackOverflow https://stackoverflow.com/questions/631813

  •  08-07-2019
  •  | 
  •  

Domanda

Sto scrivendo un pacchetto Python. Il pacchetto deve conoscere il suo numero di versione internamente, includendo anche questa versione nello script setup.py per distutils .

Qual è il modo migliore per farlo, in modo che il numero di versione non debba essere mantenuto in due posti separati? Non voglio importare lo script setup.py dal resto della mia libreria (che sembra piuttosto sciocco) e non voglio importare la mia libreria da setup.py script (allo stesso modo). Idealmente, imposterò una parola chiave in svn e la sostituirò automaticamente nei file, ma ciò non sembra possibile in svn . Potrei leggere un file di testo comune contenente il numero di versione in entrambi i posti - è questa la soluzione migliore?

Per chiarire : voglio mantenere il numero di versione in uno . Sì, ho potuto inserire una variabile nel pacchetto e di nuovo nel file setup.py . Ma poi sarebbero inevitabilmente fuori sincronia.

È stato utile?

Soluzione

All'interno del pacchetto principale, probabilmente hai un __init__.py , giusto?

Struttura della directory:

> ./packageTest
>   ./packageTest/__init__.py
>   ./packageTest/setup.py

All'interno del file __init__.py , aggiungi la seguente riga:

# package directory __init__.py
__version__ = 1.0

file setup.py:

# setup.py
from packageTest import __version__
...

Ora in qualsiasi modulo che importa dalla directory del pacchetto (chiamerò packageTest), puoi farlo:

from packageTest import setup
print 'Setup.py version:', setup.__version__  
# prints Setup.py version: 1.0

Altri suggerimenti

L'importazione dello script di installazione all'interno del pacchetto è stupida (soprattutto perché potrebbe non essere più presente dopo l'installazione della libreria), ma importare la libreria all'interno di setup.py dovrebbe andare bene. Funzionerebbe anche un file di testo separato, ma ha il problema che è necessario installare il file di testo con il pacchetto se si desidera accedere al numero di versione in fase di esecuzione.

Ho avuto un problema simile con il mio progetto. Ho scritto uno script test / build / package / deploy di livello superiore chiamato build.py (non basato su distutils, intendiamoci). Legge un file delle proprietà , che contiene il numero di versione centralizzato. Invece di mantenere direttamente un file setup.py, tengo invece un file modello e il mio script build.py lo legge, sostituisce la variabile versione con il valore dal file props e quindi scrive uno script setup.py. Quindi il mio file di script lo eseguirà, per generare un pacchetto o caricarlo su pypi.

Vedi anche Modo standard per incorporare la versione nel pacchetto python? che spiega come propagare le informazioni sulla versione da una posizione (un file chiamato _version.py ) ai luoghi in cui viene cercata da altro codice (ad esempio un attributo denominato __version __ e PEP 0345 metadati).

Quindi vedi nuovo " versioneer " strumento , che produce il file _version.py dalla cronologia dei controlli di revisione.

Inoltre, controlla la mia risposta a Modo standard per incorporare la versione nel pacchetto python? , più persone realizzano c'è un modo per farlo che evita i problemi di importazione del modulo dallo script di installazione, meglio è.

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