Скрипт это обычный .py-файл в папке scripts/ клиента. Клиент зеркалит эти файлы в твой аккаунт: те же скрипты видны на сайте в разделе Профиль → Библиотека, и править их можно прямо в браузере.
Публикация берёт скрипт из библиотеки. Отдельно загружать файл не надо, он уже там.
Копия на сайте обновляется сама, как только ты сохранил файл. Если в этот момент связи с сайтом не было, правка уедет туда позже, когда связь вернётся. Поторопить это можно командой .py sync: она отправит скрипты сразу, а если связи всё ещё нет, честно об этом скажет.
| Шаг | Что происходит |
|---|---|
| 1. Написал скрипт | Файл в scripts/ клиента или новый скрипт в Библиотеке на сайте |
| 2. Синхронизация | Клиент и сайт держат одну и ту же версию кода в твоём аккаунте |
| 3. Публикация | В Библиотеке: меню скрипта → Опубликовать на маркет, заполняешь карточку |
| 4. Модерация | Скрипт уходит на проверку модератору, статус На модерации |
| 5. Продажи | Одобрили, товар появился на витрине /market, деньги идут на баланс |
Никаких особых блоков с метаданными в коде писать не надо. Название, описание, теги, цена и скриншоты заполняются в форме публикации, а код подтянется из библиотеки сам. Перед отправкой стоит проверить три вещи.
.py reload и .py load имя, в чате не должно быть [Python Error].logo = image("https://site.ru/logo.png") # картинка
inter = assets.ttf("Inter", "https://site.ru/Inter.ttf", 9) # шрифт
assets.download("https://site.ru/preset.json", on_ready) # любой другой файлПодробности про кеш и поведение до загрузки описаны на странице Цвета, шрифты, ассеты. Главное для маркета: ничего скачивать вручную покупателю не нужно, а ссылка должна оставаться живой всё время, пока скрипт продаётся.
Если скрипт использует внешние Python-пакеты, перечисли их в поле Используемые библиотеки, по одному на строку или через запятую. У покупателя они поставятся сами вместе со скриптом, вручную делать .py install ему не придётся.
Собирать список вручную не нужно: при открытии формы сайт читает импорты твоего кода и сам подставляет пакеты в поле, уже в именах для pip (import cv2 превращается в opencv-python). Стандартная библиотека и классы игры туда не попадают. Список остаётся обычным полем: лишнее убери, недостающее допиши, версию при желании закрепи.
requests
numpy
pillow==10.2.0| Правило | Детали |
|---|---|
| Только имена пакетов | Имя и, если надо, версия, например numpy>=1.26 |
| Без флагов pip | Строки, которые начинаются с дефиса, просто выбрасываются |
| Без путей и пробелов | Локальные пути и архивы не принимаются |
| До 30 пакетов | Дубликаты убираются автоматически |
| Меняются только с обновлением | Новый список зависимостей уходит на модерацию вместе с новой версией |
Покупатель не получает твой исходник. Байткод это код, переведённый в форму, понятную Python, но уже не читаемую человеком. Сервер компилирует скрипт в такой байткод и отдаёт клиенту по шифрованному каналу.
Клиент держит байткод в памяти и запускает его оттуда. .py-файл на диск не пишется вообще.
| Что | Как |
|---|---|
| Что едет покупателю | Скомпилированный байткод, а не текст программы |
| Где живёт | Только в памяти клиента, на диске не остаётся ни .py, ни кэша |
| В библиотеке покупателя | Купленный скрипт помечен твоим ником, открыть его код в браузере нельзя |
| Перепродажа | Купленный скрипт нельзя выложить на маркет ещё раз |
| Зависимости | Едут вместе с байткодом и ставятся автоматически |
Открой Профиль → Библиотека, найди свой скрипт, в меню действий выбери Опубликовать на маркет и заполни карточку товара.
| Поле | Требования |
|---|---|
| Название | Обязательно, до 120 символов |
| Цена, ₽ | Целое число от 0. Ноль значит бесплатно, такой товар просто добавляют в библиотеку |
| Используемые библиотеки | Python-пакеты, у покупателя ставятся сами |
| Описание | Не короче 10 символов, не длиннее 4000 |
| Теги | Хотя бы один: Интерфейс, HUD, Функция, Автоматизация, Визуал, Утилита |
| Скриншоты | До трёх картинок, первая станет обложкой на витрине. Картинку можно вставить из буфера — Ctrl+V |
| Видео | Необязательно: ссылка на ролик YouTube (её тоже можно вставить Ctrl+V). На странице товара ролик открывается первым, на витрине карточка всё равно показывает скриншот |
| Версия | Формат 1.0 или 1.0.0 |
После отправки товар получает статус На модерации. Дальше он живёт на странице управления: Профиль → Библиотека → Мои товары на маркете, дальше шестерёнка.
| Вкладка | Что даёт |
|---|---|
| Аналитика | Продажи (у бесплатных это добавления), выручка, просмотры, конверсия, рейтинг, разбивка оценок |
| Редактирование | Название, цена, описание, теги, скриншоты меняются на витрине сразу, без модерации |
| Отзывы | Что пишут покупатели: оценка от 1 до 5 и текст. На любой отзыв можно ответить — ответ виден всем на странице товара |
| Загрузка | Новая версия: номер (строго больше текущего), список изменений и зависимости, всё уходит на проверку |
Платят с баланса сайта: тебе как продавцу зачисляется вся цена товара, о покупке приходит уведомление. Чтобы добавить купленное в свою библиотеку, у покупателя должна быть активная подписка. Кнопка Снять с маркета убирает товар с витрины, но копии, которые уже купили, у покупателей остаются.
Модератор видит исходный код скрипта (при обновлении построчное сравнение с прошлой версией), список заявленных зависимостей, описание и цену. Решений всего два: одобрить или отклонить с причиной. Причину ты увидишь на странице управления товаром.
| Событие | Что происходит с товаром |
|---|---|
| Первая публикация одобрена | Статус Опубликован, товар появляется на витрине |
| Первая публикация отклонена | Статус Отклонён и причина. Исправь и отправь обновление заново |
| Обновление одобрено | Новая версия становится боевой, покупатели получают уведомление |
| Обновление отклонено | На витрине остаётся текущая версия, причина видна на странице управления |
Что смотрят и за что отклоняют: