Есть ли практическая причина, по которой я должен иметь версию кода, встроенную в исходный код? Явно меня интересует setup.py
, но также некоторые используют __version__
. Под встраиванием в исходный код я имею в виду, должен ли я писать номер версии в виде текста в файле, а не заполнять поля python другими способами.
На других языках я настроил скрипты сборки так, чтобы они учитывали теги git, а затем полностью управлял номерами версий с помощью тегов. Это означает, что в репозитории никогда не будет фиксации для увеличения номера версии. Все, что мне нужно сделать, это пометить коммит для новой версии и запустить сборку.
Итак, в качестве теоретического примера я мог бы:
def _get_version()
command = ['git', 'describe', '--tags', '--match' 'versions/[0-9]*.[0-9]*']
result = subprocess.run(command, stdout=subprocess.PIPE).stdout.decode('utf-8')
return result.replace('-', '+', 1).replace('versions/', '')
setuptools.setup(
name="example-pkg-YOUR-USERNAME-HERE", # Replace with your own username
version=_get_version(),
author="Example Author",
author_email="[email protected]",
description="A small example package",
long_description=long_description,
long_description_content_type="text/markdown",
url="https://github.com/pypa/sampleproject",
packages=setuptools.find_packages(),
classifiers=[
"Programming Language :: Python :: 3",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
],
python_requires='>=3.6',
)
Что мне не ясно, так это будет ли это работать. Анализируется ли результат setuptools.setup
перед загрузкой в репозиторий пакетов или когда он загружается третьей стороной? Конечно, репозиторий git доступен только до его загрузки, а не тогда, когда пакет загружен кем-то другим через pip.
Точно так же, правильно ли я думаю, что это совершенно не заполнится, если применить его к файлу __version__
?
setuptools_scm
, который автоматизирует теги версий и git. Что касается встроенного в исходный код атрибута__version__
, некоторые люди просто предпочитают эту простоту, и это также показано в примере в руководство по стилю, что, вероятно, способствовало популярности. Краткий ответ заключается в том, что атрибут__version__
уровня модуля для вашего пакета является просто общепринятым соглашением и на самом деле вообще не требуется. - person wim   schedule 30.09.2020