freeze Python

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

Установку virtualenv вы можете изучить в статье «Установка virtualenv» а работу в нём - в статье «Применение virtualenv«

Если в команде вы видите в пути \ - значит она для Windows

Если / то для Linux или MacOS

Часто достаточно просто поменять тип слэша и команда заработает на вашей ОС

Допустим мы находимся в директории virtualenvs и активировали наше виртуальное окружение myvenv

To проверить, какие версии пакетов видит freeze execute

python -m pip freeze

или, если команда выше ничего не показала

python -m pip freeze --all

To записать всё в файл execute

python -m pip freeze > requirements.txt
cat .\requirements.txt

certifi==2020.4.5.2
chardet==3.0.4
idna==2.9
requests==2.23.0
urllib3==1.25.9

В файле requirements.txt теперь лежит описание нашего виртуального окружения myvenv, а именно список всех установленных пакетов и их версии.

Если Вы знакомы с nmp этот файл может напомнить Вам package.json

Теперь можно выйти из этого окружения, создать новое и активировать его

deactivate

Создадим новое окружение new_venv, активируем его и посмотрим, какие установлены пакеты.

python -m venv new_venv

Затем, если вы в Windows execute

nev_venv\Scripts\Activate.ps1

А если в Linux или MacOS - execute

source ./nev_venv/bin/activate

После активации execute

python -m pip list

(new_venv) PS C:\Users\Andrei\virtualenvs> python -m pip list Package Version ---------- ------- pip 19.2.3 setuptools 41.2.0 WARNING: You are using pip version 19.2.3, however version 20.1.1 is available. You should consider upgrading via the 'python -m pip install --upgrade pip' command.

Пакета всего два и даже версия pip ниже, чем в предыдущем окружении.

To установить все пакеты, упомянутые в файле requirements.txt выполним

python -m pip install -r .\requirements.txt

Collecting certifi==2020.4.5.2 (from -r .\requirements.txt (line 1)) Using cached https://files.pythonhosted.org/packages/98/99/def511020aa8f663d4a2cfaa38467539e864799289ff354569e339e375b1/certifi-2020.4.5.2-py2.py3-none-any.whl Collecting chardet==3.0.4 (from -r .\requirements.txt (line 2)) Using cached https://files.pythonhosted.org/packages/bc/a9/01ffebfb562e4274b6487b4bb1ddec7ca55ec7510b22e4c51f14098443b8/chardet-3.0.4-py2.py3-none-any.whl Collecting idna==2.9 (from -r .\requirements.txt (line 3)) Using cached https://files.pythonhosted.org/packages/89/e3/afebe61c546d18fb1709a61bee788254b40e736cff7271c7de5de2dc4128/idna-2.9-py2.py3-none-any.whl Collecting requests==2.23.0 (from -r .\requirements.txt (line 4)) Using cached https://files.pythonhosted.org/packages/1a/70/1935c770cb3be6e3a8b78ced23d7e0f3b187f5cbfab4749523ed65d7c9b1/requests-2.23.0-py2.py3-none-any.whl Collecting urllib3==1.25.9 (from -r .\requirements.txt (line 5)) Using cached https://files.pythonhosted.org/packages/e1/e5/df302e8017440f111c11cc41a6b432838672f5a70aa29227bf58149dc72f/urllib3-1.25.9-py2.py3-none-any.whl Installing collected packages: certifi, chardet, idna, urllib3, requests Successfully installed certifi-2020.4.5.2 chardet-3.0.4 idna-2.9 requests-2.23.0 urllib3-1.25.9 WARNING: You are using pip version 19.2.3, however version 20.1.1 is available. You should consider upgrading via the 'python -m pip install --upgrade pip' command.

И проверим что установилось

python -m pip list

Package Version ---------- ---------- certifi 2020.4.5.2 chardet 3.0.4 idna 2.9 pip 19.2.3 requests 2.23.0 setuptools 41.2.0 urllib3 1.25.9 WARNING: You are using pip version 19.2.3, however version 20.1.1 is available. You should consider upgrading via the 'python -m pip install --upgrade pip' command.

Все пакеты на месте и в нужных версиях. Это справедливо для не слишком сложных проектов. О возможных проблемах мы поговорим в конце статьи.

Обратите внимание, что версия pip не изменилась.

python -m pip install requests

Collecting requests Downloading requests-2.23.0-py2.py3-none-any.whl (58 kB) |████████████████████████████████| 58 kB 609 kB/s Collecting urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 Downloading urllib3-1.25.9-py2.py3-none-any.whl (126 kB) |████████████████████████████████| 126 kB 2.2 MB/s Collecting chardet<4,>=3.0.2 Downloading chardet-3.0.4-py2.py3-none-any.whl (133 kB) |████████████████████████████████| 133 kB 2.2 MB/s Collecting certifi>=2017.4.17 Downloading certifi-2020.4.5.2-py2.py3-none-any.whl (157 kB) |████████████████████████████████| 157 kB 3.2 MB/s Collecting idna<3,>=2.5 Downloading idna-2.9-py2.py3-none-any.whl (58 kB) |████████████████████████████████| 58 kB 1.6 MB/s Installing collected packages: urllib3, chardet, certifi, idna, requests Successfully installed certifi-2020.4.5.2 chardet-3.0.4 idna-2.9 requests-2.23.0 urllib3-1.25.9

Проверим какие пакеты установились

python -m pip list

Package Version ---------- ---------- certifi 2020.4.5.2 chardet 3.0.4 idna 2.9 pip 20.1.1 requests 2.23.0 setuptools 46.4.0 urllib3 1.25.9 wheel 0.34.2

request подтянул за собой ещё четыре пакета: certifi, chardet, idna, urllib3

Проверить куда установился requests в этом окружении можно командоё

python -m pip show requests

Name: requests Version: 2.23.0 Summary: Python HTTP for Humans. Home-page: https://requests.readthedocs.io Author: Kenneth Reitz Author-email: me@kennethreitz.org License: Apache 2.0 Location: c:\users\andrei\virtualenvs\test_env\lib\site-packages Requires: chardet, certifi, urllib3, idna Required-by:

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

deactivate

Если сейчас выполнить

python -m pip show requests

WARNING: Package(s) not found: requests

Можно увидеть, что глобально requests вообще не установлен

Начиная с версии Python 3.6 рекомендуется создавать виртуальные окружения командой

python -m venv myvenv

Активируется окружение так же

myvenv\Scripts\Activate.ps1

(myvenv) PS C:\Users\Andrei\virtualenvs>

Не знаю как у Вас, а у меня в PowerShell (myvenv), созданный с помощью venv подсвечен зелёным, а test_env, созданный с помощью virtualenv остаётся серым.

requirements.txt

В файл requirements.txt экспортируется список зависимостей.

Под зависимостями мы понимаем пакеты, которые необходимы для работы проекта

У зависимостей могут быть свои зависимости и между ними могут быть конфликты.

Например, Ваш проект зависит от пакетов X и Y. X зависит от Z версии 1.0 а Y от Z версии 2.0 и не рабоатет с Z 1.0. А X в свою очередь не работает с Z 2.0

Что будет в этом случае? Я не берусь сказать, но какую-то версию pip поставит.

Share in social media: