Я хочу сохранить версию приложения Python в файле app.version в корне.Как правильно добавить этот файл в дистрибутив? - PullRequest
0 голосов
/ 25 апреля 2019

Я пытаюсь сохранить версию приложения 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: Репозиторий с этим демонстрационным проектом .

...