Я пытаюсь сохранить версию приложения Python не в setup.py
, а в отдельном файле app.version
в корне репозитория. Я делаю это потому, что хочу использовать эту версию в конвейерах CI для сборки образа докера и т. Д. Но я не знаю, как загрузить этот файл в свой дистрибутив. Насколько я знаю, если я запускаю свое приложение как скрипт, я могу получить этот файл по pkg_resources
:
def run():
version = pkg_resources.resource_string('app', '../app.version').decode('utf-8').strip()
print('Me version is: {}'.format(version))
return 0
Но мне нужно каким-то образом добавить этот файл в дистрибутив, чтобы получить версию во время выполнения. Я пытался использовать параметр data_files
в setuptools
, например:
project_directory = path.abspath(path.dirname(__file__))
data_files = []
def load_from(file_name):
data_files.append(file_name)
with open(path.join(project_directory, file_name), encoding='utf-8') as f:
return f.read()
setup(
name='demo',
version=load_from('app.version').strip(),
...
packages=[
'demo',
],
package_data={
'': [
'README.md',
]
},
data_files=[
('.', data_files),
],
...
)
С пакетом .egg это работает, потому что файловая структура пакета .egg аналогична проекту:
.
./demo
./demo/app.py
./demo/__init__.py
./demo/__pycache__
./demo/__pycache__/__init__.cpython-36.pyc
./demo/__pycache__/app.cpython-36.pyc
./app.version
./README.md
./EGG-INFO
./EGG-INFO/top_level.txt
./EGG-INFO/PKG-INFO
./EGG-INFO/entry_points.txt
./EGG-INFO/SOURCES.txt
./EGG-INFO/dependency_links.txt
./EGG-INFO/zip-safe
Но для местоположения пакета .whl, если app.version отличается:
.
./demo
./demo/app.py
./demo/__init__.py
./demo-0.1.0.dist-info
./demo-0.1.0.dist-info/top_level.txt
./demo-0.1.0.dist-info/METADATA
./demo-0.1.0.dist-info/entry_points.txt
./demo-0.1.0.dist-info/WHEEL
./demo-0.1.0.dist-info/RECORD
./demo-0.1.0.data
./demo-0.1.0.data/data
./demo-0.1.0.data/data/app.version
./demo-0.1.0.data/data/README.md
Что мне делать, если я хочу сохранить версию в отдельном файле в корне репозитория, чтобы эта схема работала в пакетах .egg и .whl? Мне действительно нужно думать о распределении .egg? А может быть, я все время ошибался и есть лучший способ сохранить один файл с номером версии?
PS: Репозиторий с этим демонстрационным проектом .