Как указать точную версию python как часть требований виртуальной среды - PullRequest
0 голосов
/ 19 июня 2019

Я пытался выяснить, является ли это дубликатом, но не смог найти именно этот вопрос. Я также довольно невежественен относительно этого материала.

Я использую Python 3.7.2 (единственную версию python на моем компьютере с Windows 10) и создал виртуальную среду с использованием venv:

python -m venv / path / to / new / virtual / environment

Я добавил несколько пакетов через pip install и создал файл require.txt через pip freeze. Я написал код с использованием пакетов из виртуальной среды.

Я хотел бы поделиться своим кодом с коллегами. Я могу дать им код и файл требований, но в файле require.txt не указано, какую версию Python я использовал (3.7.2). Каков соответствующий механизм для передачи этой информации моим коллегам? Можно ли изменить файл require.txt, включив в него тот факт, что я использовал 3.7.2 и что любой, кто запускает мой код, должен также использовать 3.7.2? Будет ли ответ на этот вопрос зависеть от того, установлены ли на наших компьютерах несколько версий python на моих компьютерах?

Ответы [ 2 ]

0 голосов
/ 19 июня 2019

Venv с другой версией python важнее, если у вас есть система с несколькими версиями python. Например, CentOS 7 EPEL поставляется с Python 2.7 и Python 3.4. Когда вы пытаетесь найти более свежую версию, вы не можете найти ее в официальных репозиториях. Это связано с тем, что долгосрочная модель поддержки привязывает определенные встроенные инструменты к определенной версии и предоставляет поддержку только для исправления ошибок. 3.4.1 может быть первоначальной версией, но доступны обновления для 3.4.2 и 3.4.3. Итак, как вы используете 3,5 или 3,6 или 3,7? Вы создаете его из исходного кода и устанавливаете его в другом месте (/ usr / local / bin или /usr/opt/bin).

Это где Venv действительно сияет.

Из обычного приглашения python3 вызовет python3.4, а python вызовет 2.7.

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

Пример: вы устанавливаете python3.7 в альтернативную папку. Системный Python не изменился, и все системные утилиты работают как надо.

/ usr / local / bin / python3.7 -m venv mypython_dir создает новую виртуальную среду.

source mypython_dir / bin / activ активирует эту среду

С этого момента python представляет собой python3.7, а pip - pip3.7 из каталога / usr / local / bin, который был скопирован в каталог venv.

В Windows это не проблема, так как python не внедрен на системном уровне. Вы увидите много вопросов для систем Linux, где люди принудительно обновили системный Python до версии LTS. Плохие вещи случаются. Если вы хотите или нуждаетесь в конкретной версии для запуска вашего модуля, то ответ Grismar выше - это то, что вы хотите сделать.

0 голосов
/ 19 июня 2019

Как правило, ваш скрипт должен требовать, чтобы пользователи установили более старую версию Python. Python очень редко нарушает обратную совместимость (например, при переходе с 2.x на 3.x), поэтому нет необходимости указывать конкретную версию 3.x

Конечно, возможно, что версия ваших коллег слишком старая, и в этом случае они должны обновиться. Ваш скрипт может просто проверить, доступна ли достаточно новая версия Python:

import sys

if sys.version_info.major < 3 or sys.version_info.minor < 5:
    print("Python version 3.5 or newer required.")
    exit(1)

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

Если то, чем вы делитесь, само по себе является пакетом, вы можете сделать это в setup.py, подробнее здесь Запретить установку пакета на старых версиях Python

Обратите внимание, что если вы хотите, чтобы вышеописанное продолжало работать после 3.x (потому что младшая версия 4.0 будет 0, что <5), вы можете использовать: </p>

if sys.version_info < (3, 5):
    etc.

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

...