Должны ли мы игнорировать файл .python-version?

У меня есть файл .python-version, и когда я создаю репозиторий Python с помощью github и указываю, что он должен иметь .gitignore, он добавляет в него файл .python-version. Мне кажется, что этот файл НЕ следует игнорировать, поскольку другие люди, запускающие код на разных машинах, захотят узнать, какая версия Python им нужна.

Так почему именно .gitignored?

Сам Git не будет автоматически добавлять файл .gitignore. Поэтому я подозреваю, что вы спрашиваете, почему GitHub ведет себя так. Я предполагаю, что они просто исключают все файлы, начинающиеся с . по умолчанию - я не знаю веской причины игнорировать .python-version.

Daniel Pryden 25.01.2019 16:40

@DanielPryden: в ответе ниже указана отличная причина; если у вас установлен Python 3.7.2, но в файле .python-version указано, что владелец проекта использовал версию 3.7.1, то мы оба можем продолжать нормально работать с этим проектом за пределами исправления в конкретных выпусках.

Martijn Pieters 27.01.2019 15:09
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
27
3
6 637
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Причина, по которой .python-version следует игнорировать, заключается в том, что его версия слишком специфична. Миниатюрные версии Python (например, 2.7.1 и 2.7.2), как правило, совместимы друг с другом, поэтому вам не нужно ограничиваться конкретной крошечной версией. Кроме того, многие приложения или библиотеки Python должны работать с рядом версий Python, а не только с определенной. Использование .python-version указывает на то, что вы хотите, чтобы другие разработчики использовали точную конкретную версию Python, что обычно не является хорошей идеей.

Если вы хотите указать минимальную необходимую версию Python или, в противном случае, диапазон версий, то я считаю, что документирование этого в README является более подходящим решением.

Ответ принят как подходящий

Несмотря на то, что вы слишком конкретны, вы все равно можете изменить версию этого файла (что означает: не включать его в .gitignore по умолчанию), как:

  • он будет использоваться только pyenv
  • это хорошее дополнение к README, чтобы проиллюстрировать, какая версия python рекомендуется для конкретного проекта,
  • его можно легко переопределить (если вы используете pyenv) или просто проигнорировать (если у вас нет pyenv).

Как говорится в статье "Как управлять несколькими версиями Python и виртуальными средами":

When setting up a new project that is to use Python 3.6.4 then pyenv local 3.6.4 would be ran in its root directory.
This would both set the version, and create a .python-version file, so that other contributors’ machines would pick it up.

Но:

pyenv looks in four places to decide which version of Python to use, in priority order:

  1. The PYENV_VERSION environment variable (if specified).
    You can use the pyenv shell command to set this environment variable in your current shell session.
  2. The application-specific .python-version file in the current directory (if present).
    You can modify the current directory's .python-version file with the pyenv local command.
  3. The first .python-version file found (if any) by searching each parent directory, until reaching the root of your filesystem.
  4. The global version file. You can modify this file using the pyenv global command.
    If the global version file is not present, pyenv assumes you want to use the "system" Python. (In other words, whatever version would run if pyenv weren't in your PATH.)

Хорошо, сэр, я думаю, что ответ на ваш вопрос YES. Я только что открыл официальный репозиторий GitHub и проверил проект gitignore.

Он показал упомянутый там файл .python-version.

И если это не игнорируется, вы можете просто проверить правильность упоминания.

-1, это не отвечает на часть вопроса «почему» и на самом деле не добавляет никакой информации, которую ОП еще не знал и не указал в вопросе.

JBentley 24.03.2021 10:14

Это также может быть немного проблематично при использовании виртуальных сред Python, поскольку люди могут захотеть использовать имена виртуальных сред, отличные от 3.7.2/envs/myvenv.

Пост старый, но все еще актуальный.

Мой ответ будет "это зависит".

Имя виртуального окружения также можно использовать в версии .python, если оно управляется с помощью плагина virtualenv для pyenv. Это делает этот файл довольно бесполезным, если проект управляется в общедоступном репозитории Git, и вы можете его исключить (но не делать этого безвредно, как сказано в других ответах).

Но (и я в этой ситуации), если вы управляете проектом в частном репо и делитесь виртуальными окружениями, может иметь смысл не исключать его из Git. Это позволяет вам работать с другой средой (включая версию Python) в экспериментальной ветке проекта. Конечно, было бы намного чище разветвить или клонировать исходный проект и поэкспериментировать с новой средой в копии, но иногда проще просто создать новую ветку.

В конце концов, ИМХО, универсального ответа на вопрос нет, и это зависит от вашего рабочего процесса.

Другие вопросы по теме