Voici comment je le fais. Avantages de la méthode suivante:
Il fournit un __version__
d'attribut.
Il fournit la norme de métadonnées version. Par conséquent, il sera détecté par pkg_resources
ou d'autres outils qui analysent le paquet de métadonnées (EGG-INFO et/ou PKG-INFO, PEP 0345).
Il n'a pas d'importation de votre colis (ou autre chose) lors de la construction de votre colis, ce qui peut causer des problèmes dans certaines situations. (Voir les commentaires ci-dessous sur ce que les problèmes que cela peut entraîner.)
Il n'y a qu'un seul endroit que le numéro de version est écrite, donc il n'y a qu'un seul endroit à en changer lorsque le numéro de version change, et il ya moins de chance de versions incompatibles.
Voici comment cela fonctionne: le "canonique" pour enregistrer le numéro de version est un .py fichier, nommé "_version.py" ce qui est dans votre paquet Python, par exemple, en myniftyapp/_version.py
. Ce fichier est un module Python, mais votre setup.py ne pas l'importer! (Qui irait à l'encontre de fonction 3.) Au lieu de votre setup.py sait que le contenu de ce fichier est très simple, quelque chose comme:
__version__ = "3.6.5"
Et si votre setup.py ouvre le fichier et l'analyse, avec un code comme:
import re
VERSIONFILE="myniftyapp/_version.py"
verstrline = open(VERSIONFILE, "rt").read()
VSRE = r"^__version__ = ['\"]([^'\"]*)['\"]"
mo = re.search(VSRE, verstrline, re.M)
if mo:
verstr = mo.group(1)
else:
raise RuntimeError("Unable to find version string in %s." % (VERSIONFILE,))
Alors votre setup.py passe d'une chaîne de caractères comme la valeur de la "version" argument setup()
, satisfaisant ainsi de caractéristique 2.
Pour satisfaire caractéristique 1, vous pouvez avoir votre colis (au moment de l'exécution, et non pas au moment de l'installation!) importer le _version fichier à partir d' myniftyapp/__init__.py
comme ceci:
from _version import __version__
Voici un exemple de cette technique que j'ai utilisé pendant des années.
Le code de cet exemple est un peu plus compliqué, mais l'exemple simplifié que j'ai écrit dans ce commentaire doit être une mise en œuvre complète.
Voici un exemple de code de l'importation de la version.
Si vous voyez quelque chose de mal avec cette approche, s'il vous plaît laissez-moi savoir: zooko à zooko dot com. Si vous ne voyez pas quelque chose de mal avec cette approche ensuite de l'utiliser! Parce que plus les paquets sont livrés avec leurs numéros de version dans les endroits les mieux!