有很多方法可以到達端點。以下是conda本身的作用...
conda的版本信息的真實來源是__version__
conda/__init__.py
。按照您的建議,它可以在Python代碼中以編程方式加載爲from conda import __version__
。它也被硬連接到setup.py
here(注意this code),所以從命令行python setup.py --version
是獲取該信息的規範方式。
在暢達建造的1.x版,放線
$PYTHON setup.py --version > __conda_version__.txt
在build.sh
將設置版本使用我們的真理的來源內置包。 然而,__conda_version__.txt
文件已棄用,它可能會隨着conda-build 2.0的發佈而被刪除。在conda-build的最新版本中,首選的方法是在jinja2上下文中使用load_setup_py_data()
,這將允許您訪問來自setup.py
的所有元數據。具體而言,在meta.yaml
文件,我們就會有這樣的事情
package:
name: conda
version: "{{ load_setup_py_data().version }}"
現在,__version__
變量是如何在conda/__init__.py
設置...
你see in the source code是什麼給auxlib.packaging.get_version()
通話功能。這個函數爲了
- 首先查找一個文件
conda/.version
下,如果發現返回的內容版本標識符
- 尋找未來的
VERSION
環境變量,如果設置返回值作爲版本標識符
- 看最後在
git describe --tags
輸出,並且如果可能的話返回的版本標識符(必須安裝GIT中,必須是git倉庫,等等等等)
- 如果沒有以上產率的版本標識符,則返回
None
現在只有一個最後的把戲。在conda的setup.py
file中,我們將cmdclass
設置爲build_py
和sdist
與auxlib.packaging
提供的那些。基本上我們有
from auxlib import packaging
setup(
cmdclass={
'build_py': packaging.BuildPyCommand,
'sdist': packaging.SDistCommand,
}
)
這些特殊命令類實際修改conda/__init__.py
文件中內置/安裝的軟件包,因此__version__
變量是硬編碼爲一個字符串,並且不使用auxlib.packaging.get_version()
功能。
在你的情況下,不希望每次標記發佈,你可以使用所有上述情況,並在命令行中使用VERSION
環境變量設置的版本。喜歡的東西
VERSION=1.0.0alpha1 conda build conda.recipe
在你build
部分meta.yaml食譜,你需要添加一個script_env
鍵告訴暢達建造一路走過來傳遞VERSION
環境變量設置爲構建環境。
build:
script_env:
- VERSION
FYI任何人來到這個它得到一個更好的答案之前,我已經在Git標籤入駐*和*我增加了一個特殊的命令,我setup.py在一些包裝工具,我撞的版本使用(Inno Setup for Windows),我的'version.py',並執行需要的git提交和標籤。 – daveydave400