2014-10-01 29 views
12

如果我的確做了sphinx-quickstart,我會被問到項目的版本。讓sphinx使用setup.py的版本

我想避免爲我的項目的版本有兩個地方。

如何在python包裝世界中做到這一點?

+0

那麼,它的任何答案都適合你嗎?如果是這樣,請接受相應的答案。如果不是,問題是什麼? – 2014-10-07 16:55:46

+0

謝謝你的提問。我不急於討論這個話題。我想要一個規範的答案。我會詢問dist-sig:https://www.python.org/community/sigs/current/distutils-sig – guettli 2014-10-08 07:24:48

+0

相關:https://packaging.python.org/en/latest/single_source_version.html – guettli 2015-01-07 20:13:07

回答

11

最簡單的(也可能是乾淨的)方法是定義__version__你的頂級包的__init__.py,然後導入包和閱讀都setup.py和版本的獅身人面像項目的conf.py

因此可以說你的項目被稱爲myproject

移動當前的版本出來setup.py,並使它成爲一個變量myproject/__init__.py代替:

myproject/__init__.py

# import foo 
# ... 

__version__ = '1.5' 

導入myproject在項目的setup.py,並更換硬編碼的版本myproject.__version__

setup.py

from setuptools import setup 
from myproject import __version__ 


project = "myproject" 

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

在您的獅身人面像項目的conf.py,做同樣的。所以編輯沿着這些線路所產生的conf.py

docs/conf.py

from myproject import __version__ 

# ... 

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

爲了做這個幾乎完全一樣圖書館的一個例子,看看在requests模塊(__init__.py | setup.py | conf.py)。

這將處理使用項目版本的自動生成的文本(如鏈接到文檔的首頁)。如果您想在特定的自定義位置使用您的版本,則可以使用rst_epilog指令動態插入在conf.py中定義的配置值。

+3

在另一個所以問題已經指出,如果你在myproject/__ init__中導入一些依賴項。py,然後在setup.py中執行'from myproject import __version__',用戶將無法安裝該軟件包,而無需先安裝依賴項:http://stackoverflow.com/questions/2058802/how-can-i -get-the-version-defined-in-setup-py-setuptools-in-my-package – 2016-04-26 10:16:14

2

你可以看看bumpversion模塊:

「一個小的命令行工具來簡化通過正確的增量更新在源代碼中的所有版本字符串發佈軟件」

您可以使用配置文件.bumpversion.cfg用於複雜的多文件操作。

+0

這隻能在docs/conf.py中碰到其中一行 – kaleissin 2015-01-05 13:47:24

相關問題