Рубрики
Без рубрики

Виртуальная среда Python с Pyenv & Pipenv

Первоначально опубликовано на моем сайте в orysure.de. Это кросс-пост из моего содержимого блога. Я буду… Теги с Python, Pipenv, PENV, Fastapi.

Первоначально опубликовано на моем сайте в workgo.de Отказ Это кросс-пост из моего содержимого блога. Я буду публиковать новый контент каждую неделю или около того, и вы можете подписаться на мой Новостная рассылка Если вы хотите получить мои статьи и другую информацию TIDBITS напрямую на свой почтовый ящик!

Существует история путаницы вокруг упаковки и управление виртуальной средой Python. Мы используем Pyvenv? Венв? virtualenvwrapper? В последнее время другие варианты вышли из дерева. Использование Пьенв Дает нам возможность управлять версиями Python много как NVM и RVM , в то время как Пипнв Это преемник сама PIP и сдвинут, чтобы быть объединенным в конце концов.

Установка Пьенва

PENV позволяет легко устанавливать разные версии Python вдоль бока друг на друга без конфликтов. Он не поддерживается в Windows, но Python может быть легко установлен из их сайт . Просто обязательно добавьте его в свои окна Путь Отказ

Установка довольно проницаемая, просто запустите эти команды, чтобы настроить его.

$ git clone https://github.com/pyenv/pyenv.git ~/.pyenv
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile

Есть еще несколько подробностей установки на странице репо, если у вас есть какие-либо проблемы. У них также есть инструкции для пользователей ZSH. . Скорее всего, вам придется перезагрузить терминал после установки, чтобы иметь команду PENV доступна.

➜ pyenv
pyenv 1.2.12-2-geb68ec94
Usage: pyenv  []

Some useful pyenv commands are:
   commands List all available pyenv commands
   local Set or show the local application-specific Python version
   global Set or show the global Python version
   shell Set or show the shell-specific Python version
   install Install a Python version using python-build
   uninstall Uninstall a specific Python version
   rehash Rehash pyenv shims (run this after installing executables)
   version Show the current Python version and its origin
   versions List all Python versions available to pyenv
   which Display the full path to an executable
   whence List all Python versions that contain the given executable

See `pyenv help ' for information on a specific command.
For full documentation, see: https://github.com/pyenv/pyenv#readme

Основные подделы, с которыми мы будем иметь дело с сегодняшнего дня Местный , глобальный и Установить Отказ Во-первых, давайте посмотрим и посмотрим, какие версии мы имеем в нашей системе.

➜ pyenv versions
* system

Установка новых версий

Для большинства пользователей у вас будет только переводчик системы. Давайте установим 3.7 в качестве еще одной глобальной версии Python.

➜ pyenv install 3.7
python-build: definition not found: 3.7

The following versions contain `3.7' in the name:
  2.3.7
  3.3.7
  3.7.0
  3.7-dev
  3.7.1
  3.7.2
  3.7.3
  miniconda-3.7.0
  miniconda3-3.7.0
  stackless-3.3.7

See all available versions with `pyenv install --list'.
...

Если версия, которую мы просим, это только частичный матч, это покажет нам, какие версии мы можем установить. Давайте установим последние, что займет несколько минут.

➜ pyenv install 3.7.3
Downloading Python-3.7.3.tar.xz...
-> https://www.python.org/ftp/python/3.7.3/Python-3.7.3.tar.xz
Installing Python-3.7.3...
Installed Python-3.7.3 to /home/shawn/.pyenv/versions/3.7.3

Теперь давайте сделаем 3,7,3 во всем мире, так что нет возиться с нашей системой Python:

➜ pyenv global      
system
➜ pyenv global 3.7.3
➜ pyenv global      
3.7.3
➜ pyenv versions
  system
* 3.7.3 (set by /home/shawn/.pyenv/version)

Теперь мы по умолчанию до 3,7,3. На данный момент мы сделаем с PENV. Это очень простой инструмент для использования.

Пипенв: виртуальная среда Python

Чтобы установить PipenV, вы можете установить его через менеджер пакетов вашей системы как описано здесь на их странице репо.

Настройка

Начать начать, нам нужно создать простой проект. Давайте клонировать a репо у меня есть У этого есть несколько основных файлов в нем для отслеживания проектов в Git.

➜ git clone git@gitlab.com:autoferrit/template.git demo
Cloning into 'demo'...
remote: Enumerating objects: 6, done.
remote: Counting objects: 100% (6/6), done.
remote: Compressing objects: 100% (6/6), done.
remote: Total 6 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (6/6), done.
➜ cd demo
➜ ls -la
Permissions Size User Date Modified Git Name
drwxr-xr-x - shawn 27 Jun 12:10 -- .git
.rwxr-xr-x 474 shawn 27 Jun 12:09 -- .editorconfig
.rwxr-xr-x 2.2k shawn 27 Jun 12:09 -- .gitattributes
.rw-r--r-- 138 shawn 27 Jun 12:09 -- Pipfile
.rw-r--r-- 96 shawn 27 Jun 12:09 -- Readme.md

Вы можете увидеть содержимое файла в проекте GitLab.

  • .editorconfig : Помогает сообщить редакторам (с соответствующими плагинами), какие параметры форматирования следует использовать на файлах в этом проекте.
  • . Гитаттрибуты : Это сохраняет концовки линии в проверке при работе на различных платформах (я смотрю на вас, Windows).
  • Pipfile Это где мы будем поддерживать требования к применению, а не использовать требования.

PIPFile также будет генерироваться из следующей команды.

➜ pipenv --python 3.7.3 install

Это создаст вашу виртуальную среду Python, которую вы можете использовать бегать Pipenv Shell Отказ Лучшая часть заключается в том, что Pipenv поддерживает PENV и будет использовать версии Python, установленные с помощью этого инструмента, делая нашу систему намного очистителя.

Простое API.

Чтобы показать, как его использовать, мы собираемся создать очень простое API с помощью Fastapi. Установите требования со следующей командой:

➜ pipenv install fastapi uvicorn

Это создаст Pipfile.lock который аналогичен Package-lock.json В Node.js. Создание повторяемой среды, когда код проходит через CI Server или Production, имеет решающее значение, и именно здесь Pipenv сияет. Он гарантирует, что мы действительно можем развернуть одни и те же версии пакетов и их требования. Давайте запустим этот код.

➜ uvicorn main:app --reload

Теперь вы можете увидеть ваш API, посетив http://127.0.0.1:8000/items/5?q=somequery . Если вы хотите следовать в этом руководстве, вы можете прочитать руководство Fastapi в своей документации здесь Отказ

Pipfile.

Давайте откроем наш Pipfile, чтобы увидеть, что установлено в нашей виртуальной среде Python.

[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true

[dev-packages]

[packages]
fastapi = "*"
uvicorn = "*"

[requires]
python_version = "3.7"

По умолчанию Pipenv всегда будет устанавливать новейшие версии пакетов. Что мы все должны делать. Когда новые версии выпущены, и мы запускаем Pipenv Установить Это установит более новую версию, которая была выпущена. Чтобы обновить пакет, мы можем запустить Pipenv Обновление fastapi Или если мы хотим обновить все, что мы можем запустить Pipenv Обновление Отказ Если нам нужно выбрать определенную версию, вы можете сделать это таким же образом, если вы использовали стандарт пипс а также требования .txt Отказ

Как установить DEV пакеты в моей среде?

Для установки пакетов разработки просто пропустите --dev аргумент

➜ pipenv install --dev ptpython

А для установки пакетов разработки:

➜ pipenv install --dev

По умолчанию Pipenv Установить Установит только базовые пакеты, которые должны жить на производстве. Это то, что мы хотим. Передача --dev Параметр позволит нам установить базовые и разработки пакетов локально или во время процесса CI.

Пип в $ Shell

Активировать окружающую среду, Просто запустить

demo on writingcode master [!?] 
➜ pipenv shell        
Launching subshell in virtual environment…
 . /home/shawn/code/sandbox/demo/.venv/bin/activate

demo on writingcode master [!?] via demo 
➜ pip list    
Package Version
--------------- -------
Click 7.0    
fastapi 0.30.0 
h11 0.8.1  
httptools 0.0.13 
pip 19.1.1 
pydantic 0.28   
setuptools 41.0.1 
starlette 0.12.0 
uvicorn 0.8.2  
uvloop 0.12.2 
websockets 7.0    
wheel 0.33.4 

Примечание: я показываю свой полный текст терминала здесь, чтобы показать, что теперь он добавляет через демонстрацию к приглашению для среды Python. Вы, скорее всего, посмотрите это по-другому. Часто это выглядит так:

(demo) $ pip list
...

Проверка на уязвимости в вашей виртуальной среде

Возможно, одна из лучших функций – это возможность проверить наличие уязвимостей.

➜ pipenv check
Checking PEP 508 requirements…
Passed!
Checking installed package safety…
All good!

У нас нет уязвимостей в нашей виртуальной среде Python. Это хорошая вещь. Давайте попробуем добавить один.

➜ pipenv install 'django==2.1'
➜ pipenv check
Checking PEP 508 requirements…
Passed!
Checking installed package safety…
36883: django <2.1.6,>=2.1.0 resolved (2.1 installed)!
Django 2.1.x before 2.1.6 allows Uncontrolled Memory Consumption via a malicious attacker-supplied value to the django.utils.numberformat.format() function.

36522: django <2.1.2,>=2.1 resolved (2.1 installed)!
An issue was discovered in Django 2.1 before 2.1.2, in which unprivileged users can read the password hashes of arbitrary accounts. The read-only password widget used by the Django Admin to display an obfuscated password hash was bypassed if a user has only the "view" permission (new in Django 2.1), resulting in display of the entire password hash to those users. This may result in a vulnerability for sites with legacy user accounts using insecure hashes.

36517: django <2.1.2,>=2.1.0 resolved (2.1 installed)!
django before 2.1.2 fixes a security bug in 2.1.x. 
If an admin user has the change permission to the user model, only part of the
password hash is displayed in the change form. Admin users with the view (but
not change) permission to the user model were displayed the entire hash.

WHOAH! Не устанавливайте Django 2.1. К счастью, было исправлено, давайте обновим это.

➜ pipenv update django
Locking [dev-packages] dependencies…
Locking [packages] dependencies…
✔ Success! 
Updated Pipfile.lock (9d4a23)!
Installing dependencies from Pipfile.lock (9d4a23)…
  🐍 ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 11/11 — 00:00:01
All dependencies are now up-to-date!

➜ pip list            
Package Version
--------------- -------
...  
Django 2.1    
...

Подождите, почему установлена старая версия? Это хорошо! Почему? Это означает, что наша настройка идемпотентна. Почему? Это не сработало, потому что мы закрепили версию «2.1» Django. Поэтому мы должны отключить, что в PipFile, изменив версию на "*" Отказ Теперь мы должны быть в состоянии иметь ожидаемый результат.

➜ pipenv install            
Pipfile.lock (10cb8d) out of date, updating to (9d4a23)…
Locking [dev-packages] dependencies…
Locking [packages] dependencies…
✔ Success! 
Updated Pipfile.lock (10cb8d)!
Installing dependencies from Pipfile.lock (10cb8d)…
  🐍 ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 12/12 — 00:00:04

➜ pip list      
Package Version
--------------- -------
...  
Django 2.2.2  
...

Заключение

PENV и PIPENV заставляют гораздо легче сохранить виртуальную среду Python и версии в проверке. Теперь вы можете сделать ваши среды последовательно развертываться в системах. У Python есть история головной боли, когда речь идет последовательно устанавливает требования к системам. Использование этих инструментов поможет вам сосредоточиться на вашем фактическом коде.

К сожалению, Pipenv не ориентирован на тех библиотеки, которые будут загружены в Pypi, которые все еще требуют Setup.py. Будем надеяться, что в будущем они найдут способ обновления системы упаковки с этим тоже

И Вот ссылка снова Подписаться на мою рассылку. Вы также можете следовать за мной в Twitter.

Как вы управляете своими условиями и зависимостями в Python?

Оригинал: “https://dev.to/spacerockmedia/the-python-virtual-environment-with-pyenv-pipenv-3mlo”