2014-10-01 10 views
12

Jeśli wykonam sphinx-quickstart, otrzymam pytanie o wersję projektu.Niech sfinks użyje wersji z setup.py

Chciałbym uniknąć dwóch miejsc dla wersji mojego projektu.

Jak to zrobić w świecie pakowania pytonów?

+0

Czy więc jedna z odpowiedzi zadziałała dla Ciebie? Jeśli tak, zaakceptuj odpowiednią odpowiedź. Jeśli nie, w czym problem? –

+0

Dziękuję za pytanie. Nie spieszę się z tym tematem. Chcę odpowiedzi kanonicznej. Zapytam o dist-sig: https://www.python.org/community/sigs/current/distutils-sig – guettli

+0

Powiązane: https://packaging.python.org/en/latest/single_source_version.html – guettli

Odpowiedz

11

Najprostszym (i prawdopodobnie najczystszym) sposobem jest zdefiniowanie __version__ dla __init__.py swojego pakietu najwyższego poziomu, a następnie zaimportować ten pakiet i odczytać wersję zarówno setup.py i projekt Sfinksa conf.py.

Powiedzmy, że Twój projekt nazywa się myproject.

Najedź aktualną wersję z setup.py i uczynić ją zmienną w myproject/__init__.py zamiast:

myproject/__init__.py:

# import foo 
# ... 

__version__ = '1.5' 

importu myproject w Twój projekt na setup.py i zastąpić Hardcoded wersję z myproject.__version__ :

setup.py:

from setuptools import setup 
from myproject import __version__ 


project = "myproject" 

setup(
    name=project, 
    version=__version__, 
    # ... 
) 

w projekcie Sfinksa conf.py, zrobić to samo. Więc edytować wygenerowany conf.py wzdłuż tych linii:

docs/conf.py:

from myproject import __version__ 

# ... 

# The short X.Y version. 
version = __version__ 
# The full version, including alpha/beta/rc tags. 
release = version 

Na przykład biblioteki, które wykonuje to prawie dokładnie tak, rzucić okiem na module requests (__init__.py | setup.py | conf.py).

To zajmie się automatycznie generowanymi tekstami, w których używana jest wersja projektu (np. Linki do strony głównej dokumentacji). Jeśli chcesz użyć swojej wersji w określonych miejscach niestandardowych, możesz użyć dyrektywy rst_epilog do dynamicznego wstawiania wartości konfiguracyjnych zdefiniowanych w conf.py.

+3

In another W związku z tym zwrócono uwagę, że jeśli zaimportujesz jakieś zależności w myproject/__ init__.py, a następnie wykonaj polecenie 'from myproject import __version__' w setup.py, użytkownik nie będzie w stanie zainstalować pakietu bez uprzedniego zainstalowania zależności: http://stackoverflow.com/questions/2058802/how-can-i -get-the-wersja-zdefiniowana-w-setup-py-setuptools-in-my-package –

2

Można spojrzeć na bumpversion modułu:

„małe narzędzie wiersza polecenia, aby ułatwić zwalnianie oprogramowanie aktualizując wszystkie ciągi wersji w kodzie źródłowym w wyniku prawidłowego przyrostu”

można użyć konfiguracji plik .bumpversion.cfg dla złożonych operacji wielu plików.

+0

Może to tylko zrzucić jedną z linii w dokumencie/conf.py – kaleissin