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 поставит.