readthedocs и setuptools неверная версия scm

У меня есть пакет, который я только что обновил, чтобы использовать setuptools_scm, и обнаружил, что номер версии неверен в readthedocs.

http://sshuttle.readthedocs.org/en/v0.77/ показывает:

Version: 0.78.dev0+ng083293e.d20160304

однако, поскольку версия 083293e имеет тег 0,77, строка версии должна быть только 0,77

Похоже, что readthedocs может вносить изменения в мой исходный код перед сборкой.

Я просмотрел журналы сборки readthedocs и, похоже, на одном этапе (0.77) у него была правильная версия, но это было до создания документации.

Processing dependencies for sshuttle==0.77
Finished processing dependencies for sshuttle==0.77

Журналы сборки не упоминают версию при сборке документации.

Возможно ли это решить?

Спасибо


person Penguin Brian    schedule 05.03.2016    source источник
comment
Для потомков эта проблема также была с помощью setuptools_scm.   -  person Jason R. Coombs    schedule 12.04.2016
comment
Только что поднял проблему с readthedocs.   -  person Penguin Brian    schedule 18.04.2016


Ответы (3)


Я вижу, что вы создаете этот проект.

Ясно, что что-то изменяет состояние репозитория до того, как будет определена версия. Вы можете воспроизвести аналогичное поведение, изменив один из файлов перед самостоятельным построением документов:

(sshuttle) $ python setup.py --version
0.77
(sshuttle) $ cat >> setup.py
# a comment
(sshuttle) $ python setup.py --version
0.78.dev0+ng083293e.d20160403

В документации для чтения есть описание процесс.

Там вы можете увидеть шаги, которые выполняет RTD, а именно: (а) запустить setup.py install, затем (б) установить требования в файле requirements.txt.

Я подтвердил, что ни один из этих шагов не должен изменять состояние репо.

Однако он не объясняет, откуда взялась эта «версия» или что делает update_imported_docs. Я подозреваю, что проблема заключается в чем-то тонком, что, прочитав документацию, изменяет репо.

Вот одно место, где находится файл conf.py изменяется.

Возможно, добавление docs/conf.py в ваш .gitignore позволит игнорировать эти изменения и, таким образом, не испортить ваше рабочее состояние при вычислении версии проекта.

person Jason R. Coombs    schedule 03.04.2016
comment
Я попытался добавить docs/conf.py в .gitignore, а затем изменил docs / conf.py; однако scm по-прежнему обнаруживает изменение. Я этого ожидал. Не уверен, что понимаю, почему RTD нужно что-то менять. Или, если это действительно так, вероятно, следует сделать копию вместо изменения оригинала. Не буду задерживать дыхание в ожидании ... - person Penguin Brian; 04.04.2016
comment
Собираюсь принять этот ответ, поскольку он, вероятно, объясняет, почему я наблюдаю такое поведение, даже если оно не дает решения. - person Penguin Brian; 04.04.2016
comment
Затем я бы попробовал добавить subprocess вызов git diff или аналогичный в conf.py, а затем проверить журналы во время сборки rtd, чтобы увидеть, что конкретно меняется в репо. - person Jason R. Coombs; 04.04.2016
comment
Выполнено. Операторы печати не совсем соответствовали плану, но вы все равно можете увидеть соответствующую информацию. readthedocs.org/projects/sshuttle/builds/3880804 - person Penguin Brian; 06.04.2016
comment
Итак, мы подтвердили, что RTD изменяет conf.py, который находится в репозитории. Следовательно, setuptools_scm правильно оценивает, что проект не находится в том же состоянии, в котором он был помечен (поэтому было бы неправильно использовать помеченную версию для кода, который отличается). Чтобы обойти это, вы можете исправить setuptools_scm, чтобы игнорировать этот файл в RTD, или, может быть, есть способ сохранить conf.py как шаблон, а затем выполнить предварительный этап сборки для копирования содержимого в docs / conf.py (не отслеживается в репо). - person Jason R. Coombs; 12.04.2016
comment
У меня есть работа. Не нравится, но работает. github.com/sshuttle/sshuttle/commit/ - person Penguin Brian; 18.04.2016

https://github.com/pypa/setuptools_scm/issues/84 обновлен до записать это

мы будем работать с командой сфинкса, чтобы предоставить автоматизированную / безболезненную версию этого процесса

person Ronny    schedule 17.09.2016

В документации по setuptools_scm теперь есть инструкции по использованию с readthedocs:

Не рекомендуется использовать setuptools_scm из самого sphinx, вместо этого используйте pkg_resources после редактируемой / реальной установки:

from pkg_resources import get_distribution
release = get_distribution('myproject').version
# for example take major/minor
version = '.'.join(release.split('.')[:2])

Основная причина заключается в том, что такие службы, как readthedocs, иногда по уважительным причинам изменяют рабочий каталог, а использование установленных метаданных предотвращает использование там ненужных изменчивых данных.

Это позволяет избежать использования клуджей в соответствии с другим ответом.

person Penguin Brian    schedule 31.01.2017