Установка и работа с Rye (Python) в VSCode

Featured image

Что использовать вместо pip? Есть Pipenv, Hatch, Poetry и PDM. Но недавно появился Rye, который очень быстро всех нагоняет и обгоняет. Будем учиться с ним работать.

📖 Содержание ⬇️

Содержание

Обзор этих инструментов можно посмотреть тут.

Итак, в Rye появилось сообщение: «If you're getting started with Rye, consider uv, the successor project from the same maintainers». Так что вот только что перешел на Rye, а теперь надо переходить на uv | ↗️.

Кратко

Создаем, например, проект test-rye.

  • Установить Rye.
  • rye init test-rye — создать проект test-rye.
  • Открыть папку проекта test-rye в VSCode.
  • rye sync — создать виртуальное окружение.
  • Выбрать в VSCode созданное виртуальное окружение.
  • В папке src\test-rye создать файл main.py и запустить код из него.
  • Чтобы развернуть проект на другой машине, то установите Rye и примените rye sync.

Команды для работы:

  • rye add cowsay — добавляем новую библиотеку.
  • rye add --dev black — добавляем новую библиотеку для режима разработки.
  • rye fmt — форматирование Python файлов проекта.
  • rye lint — проверка Python файлов проекта.
  • rye self update — обновление самого Rye.
  • rye sync — зафиксировать библиотеки и обновить файлы виртуального окружения по .lock файлам.
  • rye sync --update-all — обновление всех библиотек проекта.
  • rye sync --update cowsay — обновление конкретной библиотеки.
  • rye remove cowsay — удаление библиотеки.
  • rye test — запускает тесты на базе pytest.
  • rye fetch 3.12 + rye pin 3.12 + rye sync — переключает на другую версию Python.
  • rye add --dev pyinstaller + pyinstaller -F src\test_rye\main.py — генерирует EXE файл.
  • rye build --clean — собирает библиотеку.
  • rye publish — публикация библиотеки на PyPI.

Ссылки

Подготовка

Установка программ и создание папки для проектов

Python не обязателен, так как Rye умеет сам устанавливать и управлять Python.

Нужен VSCode. Если его нет, то смотрите статью Установка Visual Studio Code (простая) и открытие Markdown | ↗️.

Нужно расширение Python в VScode:

Установка расширения Python

Рисунок 1 — Установка расширения Python

Не забудьте перейти в раздел файлов:

Раздел Explorer

Рисунок 2 — Раздел Explorer

Создайте любым способом на компьютере папку, где будут располагаться проекты, например, C:\python-projects, если у вас еще нет папки для Python проектов (например, через команду mkdir C:\python_projects\ или просто через проводник). Через File → Open Folder... откройте эту папку (там тоже через окно открытия папки можно создать нужную папку):

Открытие папки

Рисунок 3 — Открытие папки

Вас спросят о том, доверяете ли вы авторам этой папки. Но ведь эту папку вы только что создали? Так что доверяем:

Подтверждение доступа к папке

Рисунок 4 — Подтверждение доступа к папке

И включите режим автосохранения, чтобы не забывать сохранять изменения в файле:

Режим Auto Save

Рисунок 5 — Режим Auto Save

Установка Rye

На главной странице сайта скачиваем установщик под вашу операционную систему. В нашем случае это Windows:

Скачивание установщика

Рисунок 6 — Скачивание установщика

Запускаем его и нас попросят ответить на несколько вопросов. Для начала нажимаем y на клавиатуре:

Начало установки Rye

Рисунок 7 — Начало установки Rye

На данный момент (лето 2024) предлагается выбрать механизм установки пакетов. И по умолчанию идет uv на Rust, который работает быстрее pip. Выбор параметров осуществляется стрелками (если хотите что-то другое выбрать), а подтверждаем через Enter:

Выбор систему установки пакетов

Рисунок 8 — Выбор систему установки пакетов

Можно использовать ту версию Python, которая есть уже на компьютере, но лучше довериться Rye, что позволит также переключать разные версии Python в проектах на Rye:

Выбор метода управления Python

Рисунок 9 — Выбор метода управления Python

Если вы доверились Rye, то нужно прописать версию Python, которую он установит. Рекомендую ставить не самую последнюю версию, а предпоследнюю, так как многие библиотеки могут не работать с последней версией. На момент написания статьи последняя версия — это 3.12, поэтому пишем [email protected] и жмем Enter:

Выбор версии Python

Рисунок 10 — Выбор версии Python

Процесс установки Rye

Рисунок 11 — Процесс установки Rye

Завершение установки

Рисунок 12 — Завершение установки

Создание проекта

Закройте VSCode и откройте его заново, если вы при установке Rye его не закрывали.

Вызываем консоль в VSCode Ctrl → ` (Ctrl → Ё), прописываем команду создания нового проекта (после ввода команды не забываем нажать Enter). Вместо test-rye введите имя своего проекта (не используйте нижнее подчеркивание вместо дефиса):

rye init test-rye

Инициализация проекта

Рисунок 13 — Инициализация проекта

Если вы видите ошибку, как на рисунке ниже, то скорее всего вы не перезагрузили VSCode. Закройте и откройте его заново:

Ошибка при инициализация проекта

Рисунок 14 — Ошибка при инициализация проекта

В результате появилась папка со всеми нужными файлами. Обратите внимание, что в папке src создалась папка test_rye, то есть в проекте для работы импорта внутри Python скриптов дефис заменяется на нижнее подчеркивание. Если вы назвали проект по другому, то и название папки будет другим.

Командой cd test-rye переходим в эту папку проекта:

Переход в папку проекта

Рисунок 15 — Переход в папку проекта

Но лучше сразу откройте через File → Open Folder... вновь созданную папку C:\python-projects\test-rye и откройте терминал Ctrl → ` (Ctrl → Ё). В дальнейшем в статье буду исходить, что открыта именно папка в VSCode:

Открытая папка проекта test-rye

Рисунок 16 — Открытая папка проекта test-rye

Создание виртуального окружения

Теперь нужно создать виртуальное окружение через команду:

rye sync

Папка виртуального окружения будет создана в папке с проектом:

Созданное виртуальное окружение

Рисунок 17 — Созданное виртуальное окружение

В других системах при работе с виртуальным окружением нужно следить, чтобы в терминале название виртуального окружения отображалось в круглых скобках, что означает активацию виртуального окружения:

Отображение названия виртуального окружения в терминале

Рисунок 18 — Отображение названия виртуального окружения в терминале

В Rye это не обязательно, так как он сам следит за тем, чтобы запускались скрипты в нужном виртуальном окружении. Это можно проверить, введя команду в терминал:

python -c "import sys; print(sys.prefix)"

Путь к текущему виртуальному окружению

Рисунок 19 — Путь к текущему виртуальному окружению

Будет видно, что используется виртуальное окружение нашего проекта.

Однако VScode всё равно надо научить запускать самостоятельно нужное виртуальное окружение, когда VSCode сам запускает Python скрипты. Но об этом ниже в следующем разделе.

Основные настройки проекта находятся в файле pyproject.toml, а также есть файлы фиксирования библиотек проекта requirements.lock и requirements-dev.lock.

Написание кода и его запуск

Теперь создадим main.py в папке scr/test_rye. Например, для этого можно кликнуть на указанную папку правой кнопкой мыши, а затем выбрать New File...:

Выбор пункта создания нового файла

Рисунок 20 — Выбор пункта создания нового файла

Вводим имя файла main.py и нажимаем Enter:

Создание нового файла

Рисунок 21 — Создание нового файла

Теперь можем протестировать запуск какого-нибудь Python скрипта (вторая строка для проверки запуска правильного виртуального окружения):

print(2+2)

import sys; print(sys.prefix)

Проверим, что VSCode правильно подхватил виртуальное окружение .venv. Для этого смотрим внизу справа в панели состояния VSCode. Если там общее виртуальное окружение отображено (как на рисунке), то нажимаем на него и выбираем наше окружение .venv:

Выбор виртуального окружения в VSCode

Рисунок 22 — Выбор виртуального окружения в VSCode

Выбор виртуального окружения в VSCode

Рисунок 23 — Выбор виртуального окружения в VSCode

Запускаем кнопкой запуска сверху справа:

Запуск Python кода

Рисунок 24 — Запуск Python кода

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

Добавление библиотек

Добавление пакетов осуществляется через команду наподобие:

rye add cowsay

Добавление библиотеки

Рисунок 25 — Добавление библиотеки

Например, в main.py напишем такой код:

import cowsay

cowsay.cow('Hello World')

Запуск кода с установленной библиотекой

Рисунок 26 — Запуск кода с установленной библиотекой

Добавим ещё для примера библиотеку matplotlib:

rye add matplotlib

В main.py напишем такой код:

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-5, 5, 200)
y = x ** 2

fig, ax = plt.subplots()
ax.plot(x, y)
plt.show()

Вывод графика

Рисунок 27 — Вывод графика

На рабочей Windows всё прошло нормально, но на пустой Windows в Sandbox вышла ошибка:

Ошибка с matplotlib

Рисунок 28 — Ошибка с matplotlib

Пришлось по инструкции устанавливать rye add msvc-runtime и Visual C++ Redistributable (устанавливал летом 2024 vc_redist.x64.exe) и перезапускать VSCode.

Если вам нужны в проекте библиотеки для разработки, то есть они не будут нужны потом пользователю вашей библиотеки, если вы её будете публиковать, то устанавливаем их с параметром --dev. Например, вам в самом проекте при его написании надо форматировать код с помощью библиотеки black. Вам эта библиотека нужна как разработчику библиотеки, но пользователям вашего проекта не нужна. Тогда устанавливаем его вот так:

rye add --dev black

Установка пакета black

Рисунок 29 — Установка пакета black

Форматирование кода

Выше в разделе библиотек говорилось про библиотеку black для форматирования кода, но в Rye встроена библиотека Ruff. И её можно использовать сразу для всех файлов проекта:

rye fmt

Был вот такой кода:

import matplotlib.pyplot as plt
import    numpy as   np

x =    np.linspace( -5, 5,    200)
y = x**2
fig, ax =    plt.subplots()
ax.plot(x,    y)
plt.show()

Стал вот такой код:

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-5, 5, 200)
y = x**2
fig, ax = plt.subplots()
ax.plot(x, y)
plt.show()

Форматирование Python кода

Рисунок 30 — Форматирование Python кода

Для форматирования кода в 120 символов можно использовать команду rye fmt -- --line-length 120, а можно в pyproject.toml вставить строчки ниже и тогда можно использовать rye fmt:

[tool.ruff]
line-length = 120

Дополнительные команды для Rye

Чтобы обновить сам Rye для последней версии воспользуйтесь командой:

rye self update

Обновление Rye

Рисунок 31 — Обновление Rye

Чтобы зафиксировать библиотеки и обновить файлы виртуального окружения по .lock файлам, то используйте команду:

rye sync

Запуск rye sync

Рисунок 32 — Запуск rye sync

Обновление всех библиотек в проекте можно так:

rye sync --update-all

Обновление всех пакетов

Рисунок 33 — Обновление всех пакетов

Если нужно обновить конкретную библиотеку, например, cowsay, то это можно сделать следующей командой:

rye sync --update cowsay

Обновление конкретного пакета

Рисунок 34 — Обновление конкретного пакета

Если какой-то пакет вам не нужен, то удаляем так:

rye remove cowsay

Удаление библиотеки

Рисунок 35 — Удаление библиотеки

Для проверки кода на наличие ошибок можно использовать встроенный линтер:

rye lint

Пример сообщения об ошибке

Рисунок 36 — Пример сообщения об ошибке

Тестирование

Тестирование осуществляется через pytest, который нужно установить командой:

rye add --dev pytest

Установка pytest

Рисунок 37 — Установка pytest

Теперь в файле src\main.py напишем, например, такие функции, которые хотим протестировать:

def multiply_2(x):
    return x * 2

def multiply_10(x):
    return x * 10

def multiply_20(x):
    return x * 20

def multiply_30(x):
    return x * 30

Создайте папку tests в корне своего проекта:

Создание папки tests через правый клик в explorer

Рисунок 38 — Создание папки tests через правый клик в explorer

В неё создайте файл, например, test_main.py:

Созданный файл

Рисунок 39 — Созданный файл test_main.py

Обратите внимание, что файл должен начинаться с test_. То есть если вы назовёте файл, например, test.py, tests.py, testmain.py, for_test.py, то pystest не будет находить тесты (можно настроить, но лучше так не делать).

Теперь pytest должен понять, где находятся наш основной код. Для этого в файле pyproject.toml в конце прописываем строчки настройки pystest (не пропустите пробел после точки):

[tool.pytest.ini_options]
pythonpath = ". src"

Настройка pytest

Рисунок 40 — Настройка pytest

И теперь в файле test_main.py можем прописать простейшие тесты наших функций:

from src.test_rye.main import *


def test_multiply_2():
    re = multiply_2(2)
    assert re == 4


def test_multiply_10():
    re = multiply_10(2)
    assert re == 20


def test_multiply_20():
    re = multiply_20(2)
    assert re == 40


def test_multiply_30():
    re = multiply_30(2)
    assert re == 60

Функции тестов должны также начинаться с test_.

Теперь в терминале вызываем команду запуска тестов:

rye test

Если всё правильно сделали, то тесты должны успешно быть пройдены:

Успешный запуск тестов

Рисунок 41 — Успешный запуск тестов

Развертывание проекта на новой машине

Теперь представим, что вы успешно написали свой проект и хотите теперь запустить на другой машине. Как быть?

Чтобы развернуть проект на другой машине, то установите Rye и примените rye sync.

На другой компьютер вы переносите папку проекта test-rye (или как он у вас там называется). Для приведенного выше примера нам нужны следующие файлы из первоначальной папки:

Файлы проекта

Рисунок 42 — Файлы проекта

То есть папки .pytest_cache, .ruff_cache, .venv вам не нужны. Они нужны конкретно вашей локальной версии проекта. Если вы используете Git, то благодаря файлу .gitignore лишние папки не попадут в переносимую папку.

На компьютере устанавливаете опять Rye и VSCode, открываете папку test-rye в VSCode:

Проект открытый в VSCode

Рисунок 43 — Проект открытый в VSCode

Пока у нас не установлено виртуальное окружение, что видно по отсутствию его внизу справа с надписью Select Interpreter.

Пишем команду для создания виртуального окружения с теми же самыми библиотеками, что были в проекте. Это прописано в файлах requirements.lock и requirements-dev.lock:

rye sync

Проект открытый в VSCode

Рисунок 44 — Проект открытый в VSCode

Выбираем в VSCode виртуальное окружение из папки .venv (VSCode скорее всего даже предложит поменять виртуальное окружение самостоятельно).

Теперь можно запускать код. Я для примера вставил код выше для тестирования matplotlib:

Восстановленный проект на другой машине

Рисунок 45 — Восстановленный проект на другой машине

Выбор другой версии Python

Вначале скачиваем нужную версию Python:

rye fetch 3.12

Скачивание новой версии Python

Рисунок 46 — Скачивание новой версии Python

Потом надо указать, что мы хотим переключиться на другую версию Python. Это команда приведет к изменению файла .python-version:

rye pin 3.12

А потом надо переделать виртуальное окружение под новую версию Python:

rye sync

Всё. Теперь в VSCode отображается другая версия Python. Также это можно проверить через код:

import sys
print(sys.version)

Скачивание новой версии Python

Рисунок 47 — Скачивание новой версии Python

Чтобы обратно перейти на старую версию Python, то меняем аналогично, только уже не скачивая версию:

rye pin 3.11
rye sync

Аналогично поступаем для обновления текущей версии Python. Например, у вас стоит Python 3.11.8, а вышла версия 3.11.8. Простой команды я не нашел, но можно через тот же способ всё провернуть:

rye fetch 3.11.9
rye pin 3.11.9
rye sync

Посмотреть на последнюю версию Python, на которую вы хотите обновиться можно на сайтах Python.org или python-build-standalone.

Сборка EXE файла

Попробуем собрать консольное приложение с таким кодом:

a = int(input())
b = int(input())
print(a + b)

input("Press enter to exit.")

Для этого установим в режиме --dev пакет pyinstaller :

rye add --dev pyinstaller

После этого можно запустить pyinstaller:

pyinstaller -F src\test_rye\main.py

Генерация EXE файла

Рисунок 48 — Генерация EXE файла

Создаться папка dist с файлом main.exe.

Запускаем, вводим числа и видим:

Результат выполнения программы

Рисунок 49 — Результат выполнения программы

С matplotlib тоже всё работает:

Результат выполнения программы с matplotlib

Рисунок 50 — Результат выполнения программы с matplotlib

Запуск EXE файлов был проверен на пустой Windows 11.

Если один файл не нужен, то не используйте флаг -F, а если нужно консольное приложение без консоли (то есть должно в фоне выполняться без создания черного окна терминала), то используйте флаг --windowed, например, pyinstaller -F --windowed src\test_rye\main.py.

Создание пакетов

Читайте в отдельной статье Создание пакетов в Python через Rye | ↗️.

Но так как Rye уже устарел, то смотрите Создание пакетов в Python через uv | ↗️.