Установка и работа с Rye (Python) в VSCode
Что использовать вместо 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.
Ссылки
- Rye — сайт инструмента.
- Rye - Basics — базовая документация.
- Создание пакетов в Python через Rye | ↗️.
Подготовка
Установка программ и создание папки для проектов
Python не обязателен, так как Rye умеет сам устанавливать и управлять Python.
Нужен VSCode. Если его нет, то смотрите статью Установка Visual Studio Code (простая) и открытие Markdown | ↗️.
Нужно расширение Python в VScode:

Рисунок 1 — Установка расширения Python
Не забудьте перейти в раздел файлов:

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

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

Рисунок 4 — Подтверждение доступа к папке
И включите режим автосохранения, чтобы не забывать сохранять изменения в файле:

Рисунок 5 — Режим Auto Save
Установка Rye
На главной странице сайта скачиваем установщик под вашу операционную систему. В нашем случае это Windows:

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

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

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

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

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

Рисунок 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:

Рисунок 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:

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

Рисунок 23 — Выбор виртуального окружения в VSCode
Запускаем кнопкой запуска сверху справа:

Рисунок 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 вышла ошибка:

Рисунок 28 — Ошибка с matplotlib
Пришлось по инструкции устанавливать rye add msvc-runtime и Visual C++ Redistributable (устанавливал летом 2024 vc_redist.x64.exe) и перезапускать VSCode.
Если вам нужны в проекте библиотеки для разработки, то есть они не будут нужны потом пользователю вашей библиотеки, если вы её будете публиковать, то устанавливаем их с параметром --dev. Например, вам в самом проекте при его написании надо форматировать код с помощью библиотеки black. Вам эта библиотека нужна как разработчику библиотеки, но пользователям вашего проекта не нужна. Тогда устанавливаем его вот так:
rye add --dev 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()

Рисунок 30 — Форматирование Python кода
Для форматирования кода в 120 символов можно использовать команду rye fmt -- --line-length 120, а можно в pyproject.toml вставить строчки ниже и тогда можно использовать rye fmt:
[tool.ruff]
line-length = 120
Дополнительные команды для Rye
Чтобы обновить сам Rye для последней версии воспользуйтесь командой:
rye self update

Рисунок 31 — Обновление Rye
Чтобы зафиксировать библиотеки и обновить файлы виртуального окружения по .lock файлам, то используйте команду:
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

Рисунок 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 в корне своего проекта:

Рисунок 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"

Рисунок 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:

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

Рисунок 44 — Проект открытый в VSCode
Выбираем в VSCode виртуальное окружение из папки .venv (VSCode скорее всего даже предложит поменять виртуальное окружение самостоятельно).
Теперь можно запускать код. Я для примера вставил код выше для тестирования matplotlib:

Рисунок 45 — Восстановленный проект на другой машине
Выбор другой версии Python
Вначале скачиваем нужную версию Python:
rye fetch 3.12

Рисунок 46 — Скачивание новой версии Python
Потом надо указать, что мы хотим переключиться на другую версию Python. Это команда приведет к изменению файла .python-version:
rye pin 3.12
А потом надо переделать виртуальное окружение под новую версию Python:
rye sync
Всё. Теперь в VSCode отображается другая версия Python. Также это можно проверить через код:
import sys
print(sys.version)

Рисунок 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

Рисунок 48 — Генерация EXE файла
Создаться папка dist с файлом main.exe.
Запускаем, вводим числа и видим:

Рисунок 49 — Результат выполнения программы
С matplotlib тоже всё работает:

Рисунок 50 — Результат выполнения программы с matplotlib
Запуск EXE файлов был проверен на пустой Windows 11.
Если один файл не нужен, то не используйте флаг -F, а если нужно консольное приложение без консоли (то есть должно в фоне выполняться без создания черного окна терминала), то используйте флаг --windowed, например, pyinstaller -F --windowed src\test_rye\main.py.
Создание пакетов
Читайте в отдельной статье Создание пакетов в Python через Rye | ↗️.
Но так как Rye уже устарел, то смотрите Создание пакетов в Python через uv | ↗️.