Существует множество способов добраться до конечной точки. Вот что делает сама конда ...
Источником истины для информации о версии конды является __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 предпочтительный способ сделать это - использовать load_setup_py_data()
в контексте jinja2, что даст вам доступ ко всем метаданным от 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 репозиторий, и т.д. и т.п.)
- , если ни один из вышеперечисленного выхода идентификатор версии, не возвращает
None
Теперь есть еще один заключительный трюк. Вот conda мы установили 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 для натыкаясь версии в некоторых упаковочных инструментов I» m с помощью (Inno Setup для Windows), my 'version.py' и выполнения коммитов git и тегов. – daveydave400