{"id":51351161,"url":"https://github.com/mike2024new/pyoffline2","last_synced_at":"2026-07-02T16:02:35.188Z","repository":{"id":366682130,"uuid":"1275352356","full_name":"Mike2024New/Pyoffline2","owner":"Mike2024New","description":"Portable offline Python package manager — download once, use anywhere","archived":false,"fork":false,"pushed_at":"2026-06-22T22:50:47.000Z","size":44,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-22T23:11:42.460Z","etag":null,"topics":["devtools","offline","packages-manager","pip","portable","pypi","python","virtual-environment"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Mike2024New.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-20T15:22:56.000Z","updated_at":"2026-06-22T22:50:51.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/Mike2024New/Pyoffline2","commit_stats":null,"previous_names":["mike2024new/pyoffline2"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/Mike2024New/Pyoffline2","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mike2024New%2FPyoffline2","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mike2024New%2FPyoffline2/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mike2024New%2FPyoffline2/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mike2024New%2FPyoffline2/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Mike2024New","download_url":"https://codeload.github.com/Mike2024New/Pyoffline2/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Mike2024New%2FPyoffline2/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35053492,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-02T02:00:06.368Z","response_time":173,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["devtools","offline","packages-manager","pip","portable","pypi","python","virtual-environment"],"created_at":"2026-07-02T16:02:34.365Z","updated_at":"2026-07-02T16:02:35.182Z","avatar_url":"https://github.com/Mike2024New.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# PyOffline2\n\n**Переносимый офлайн-менеджер Python-пакетов**\n\n---\n\n## Содержание\n\n- [О проекте](#о-проекте)\n- [Целевая аудитория](#-целевая-аудитория)\n- [Что умеет](#-что-умеет)\n- [Важно](#-важно)\n- [Быстрый старт](#-быстрый-старт)\n- [Команды](#-команды)\n- [Где хранить архив](#-где-хранить-архив)\n- [История развития проекта](#-история-развития-проекта)\n- [Лицензия](#-лицензия)\n- [Примечания](#примечания)\n\n---\n\n## О проекте\n\n**pyoffline** — автономный менеджер Python-окружений, которому не нужен постоянный доступ к интернету.\n\nКратко:\n\n\u003e PyOffline2 — ваш переносимый «чемоданчик судного дня» для Python-разработки. Один раз, пока есть интернет, скачайте\n\u003e нужные версии Python (портативные, без глобальной установки) и все необходимые пакеты из PyPI в локальный архив.\n\u003e Никаких\n\u003e серверов, баз данных и сложного развёртывания — всё работает из коробки, запускается за пару минут и не требует\n\u003e специальных знаний. Дальше создавайте проекты где угодно, полностью офлайн, вообще без интернета. Нестабильная связь,\n\u003e долгая загрузка или внезапная недоступность репозиториев перестают быть проблемой — всё уже у вас под рукой. При этом\n\u003e PyOffline2 не заменяет uv или pip, а дополняет их, работая параллельно и не вмешиваясь в привычный вам процесс.\n\nТермины использующиеся далее:\n\n- `архив` - подразумевается папка resources в которую скачиваются портативные версии python (resources/python_strage),\n  и пакеты (resourcs/packages_storage), то есть те ресурсы которые сохраняются и могут использоваться в том числе\n  оффлайн.\n\n- `проект` - папка с кодом python и своим виртуальным окружением которое может быть создано через `pyoff init` на базе\n  python из архива (из папки python_storage), в него устанавливаются проекты из архива (packages_storage).\n\n```text\n┌─────────────────────────────────────────────────────────────────┐\n│                         АРХИВ (resources/)                      │\n│  ┌───────────────────┐  ┌───────────────────────────────────┐   │\n│  │ python_storage/   │  │ packages_storage/                 │   │\n│  │  3.10/            │  │  3.10/                            │   │\n│  │  3.12/            │  │    fastapi/    requests/          │   │\n│  │  3.14/            │  │  3.12/                            │   │\n│  └───────────────────┘  │    fastapi/    requests/          │   │\n│                         └───────────────────────────────────┘   │\n│                                                                 │\n│  Заранее запасенные python-portable дистрибутивы, и пакеты с    │\n│  pypi.org                                                       │\n│                                                                 │\n└─────────────────────────────────────────────────────────────────┘\n                              │\n                              │ pyoff init -pv 3.12\n                              │ pyoff add fastapi\n                              ▼\n┌─────────────────────────────────────────────────────────────────┐\n│                      ПРОЕКТ (my-project/)                       │\n│  ┌───────────────────────────────────────────────────────────┐  │\n│  │ .venv/  (виртуальное окружение на базе Python 3.12)       │  │\n│  │ pyproject.toml  (зависимости: fastapi==0.138.0)           │  │\n│  └───────────────────────────────────────────────────────────┘  │\n│                                                                 │\n│ Пользовательский проект, пересоздаваемая единица, использующая, │\n│ ресурсы из resources.                                           │\n│                                                                 │\n└─────────────────────────────────────────────────────────────────┘\n```\n\nПодробно:\n\nВ современном мире мы привыкли полагаться на облака, CDN и глобальные репозитории. Это удобно, пока связь стабильна. Но\nчто происходит, когда:\n\n- интернет медленный, нестабильный или отсутствует?\n- нужно развернуть десяток проектов, а каждый `pip install` заново качает гигабайты?\n- критически важные пакеты вдруг становятся недоступны по независящим от вас причинам? (потеря связи с PyPi.org,\n  Python.org, блокировки, политика... Другие обстоятельства.)\n\npyoffline даёт простой ответ: **один раз скачал — пользуешься везде**.\n\nВы формируете собственный архив интерпретаторов Python и пакетов, после чего создание проектов и установка зависимостей\nпроисходят полностью офлайн. Никакой магии, никакой привязки к внешним серверам. Только вы, ваш код и всё, что нужно для\nработы.\n\n#### Версии python скачиваются под конкретную версию вашей ОС (проверено на windows 10, linux ubuntu/mint):\n\nНапример результат выполнения команды `get-python 3.10` :\n\n```text\n...\n├─ 📁 resources\n│  ├── 📁 python_storage\n│  │   └── 📁 windows-x86_64  \u003c- действие было выполнено на windows\n│  │       ├── 📁 3.10 \u003c- добавлен python 3.10 (результат `get-python 3.10`)\n│  │       │   └── 📃 ...\n│  │       ├── 📁 3.12\n│  │       │   └── 📃 ...\n│  │       ├── 📁 3.14\n│  │       │   └── 📃 ...\n...\n```\n\n#### Скачиваемые в архив пакеты распределяются по версиям python.\n\nНапример результат выполнения команды `get python-dotenv, requests` :\n\n```text\n...\n├─ 📁 resources\n│  ├─ 📁 packages_storage\n│  │  └─ 📁 windows-x86_64  \u003c- действие было выполнено на windows\n│  │     ├─ 📁 3.10\n│  │     │  ├─ 📁 python_dotenv==1.2.2\n│  │     │  │  └─ 📦 python_dotenv-1.2.2-py3-none-any.whl\n│  │     │  └─ 📁 requests==2.34.2\n│  │     │     ├─ 📦 certifi-2026.6.17-py3-none-any.whl\n│  │     │     ├─ 📦 charset_normalizer-3.4.7-cp310-cp310-win_amd64.whl\n│  │     │     ├─ 📦 idna-3.18-py3-none-any.whl\n│  │     │     ├─ 📦 requests-2.34.2-py3-none-any.whl\n│  │     │     └─ 📦 urllib3-2.7.0-py3-none-any.whl\n│  │     ├─ 📁 3.12\n│  │     │  ├─ 📁 python_dotenv==1.2.2\n│  │     │  │  └─ 📦 python_dotenv-1.2.2-py3-none-any.whl\n│  │     │  └─ 📁 requests==2.34.2\n│  │     │     ├─ 📦 certifi-2026.6.17-py3-none-any.whl\n│  │     │     ├─ 📦 charset_normalizer-3.4.7-cp312-cp312-win_amd64.whl\n│  │     │     ├─ 📦 idna-3.18-py3-none-any.whl\n│  │     │     ├─ 📦 requests-2.34.2-py3-none-any.whl\n│  │     │     └─ 📦 urllib3-2.7.0-py3-none-any.whl\n│  │     └─ 📁 3.14\n│  │        ├─ 📁 python_dotenv==1.2.2\n│  │        │  └─ 📦 python_dotenv-1.2.2-py3-none-any.whl\n│  │        └─ 📁 requests==2.34.2\n│  │           ├─ 📦 certifi-2026.6.17-py3-none-any.whl\n│  │           ├─ 📦 charset_normalizer-3.4.7-cp314-cp314-win_amd64.whl\n│  │           ├─ 📦 idna-3.18-py3-none-any.whl\n│  │           ├─ 📦 requests-2.34.2-py3-none-any.whl\n│  │           └─ 📦 urllib3-2.7.0-py3-none-any.whl\n...\n```\n\nПакеты скачались на все версии Python и распределились в каталоге resources. Транзитивные зависимости также\nподхватываются.\n\n### P.S.\n\n\u003e *Я искренне надеюсь, что использование этого проекта ограничится потребностью развернуть проект там, где временно\n\u003e плохой интернет — например, у бабушки в деревне. Но всякое бывает, и лучше иметь и не нуждаться, чем нуждаться и не\n\u003e иметь.*\n\n---\n\n## 👥 Целевая аудитория\n\n- Хобби- и соло-разработчики\n- Небольшие команды\n- Все, кто не хочет поднимать промышленные серверные решения ради сохранения набора любимых библиотек\n\n---\n\n## 🚀 Что умеет\n\n- 🐍 **Скачивать Python** — портативные сборки\n  с [python-build-standalone](https://github.com/astral-sh/python-build-standalone/releases) через `getpybs`\n- 🐍 **Создавать виртуальные окружения** на целевой машине: `init -pv 3.12`\n- 📦 **Скачивать пакеты с PyPI** и распределять их по версиям Python: `get fastapi uvicorn` или\n  `get-from requirements.txt`\n- 📦 **Устанавливать пакеты в целевой проект** `add fastapi uvicorn` или `add passlib[argon2]` (работает с\n  `pyproject.toml`)\n- 📦 **Обновлять уже скачанные пакеты** `update` а если добавить флаг `keep`, то старые версии будут удаляться, останется\n  только указанное число последних версий не раздувая архив.\n- 🧹 **Удалять пакеты из целевого проекта с очисткой зависимостей-сирот** — аналог `uv remove`, только полностью офлайн.\n  Удаляет то, что\n  больше не используется ни одним другим пакетом\n- 📖 **Вести структурированный (машиночитаемый) лог** о выполненных операциях корневая папка logs команда `folder`, чтобы\n  открыть корневую папку приложения.\n- 📂 **Выводить дерево проекта и копировать контент** в буфер обмена. Удобно для обзора проекта, и для чата с\n  ИИ. [Смотреть анимацию](docs/tree_instruction.md)\n\n---\n\n## ⚠️ Важно\n\nPyOffline2 **не обходит блокировки** и **не восстанавливает доступ** к PyPI или python.org. Он лишь позволяет\n**сохранить пакеты заранее**, пока связь ещё есть — то есть «подстелить соломку» на случай возможных ограничений. Пока\nесть соединение с PyPi.org вы делаете свой чемоданчик судного дня.\n\nPyOffline2 не конкурирует с `uv`, `pip` и другими инструментами. Он опирается на их сильные стороны и дополняет их,\nадаптируя под конкретную задачу: **работа без связи с pypi.org и python.org**.\n\nДля windows/linux качаются разные whl и python.\n\n---\n\n## ⚡ Быстрый старт\n\nПереходим сразу к делу:\n\n### На windows:\n\n#### Установка:\n\n```bash\ngit clone https://github.com/Mike2024New/pyoffline2.git # Скачать репозиторий\ncd Pyoffline2 # Перейти в папку с архивом\npython -m venv .venv # Создать venv (! Папка должна называться .venv, минимальная версия 3.12)\n.venv/Scripts/activate # Активировать виртуальное окружение:\npython start.py # Запустить стартовый скрипт который скачает зависимости проекта.\npython cli.py --help # Войти в интерфейс приложения.\n# 7. Опционально: для получения исполняемого файла (bin/exe):\npython cli.py build # сборка .exe\n# * - откроется папка с собранным дистрибутивом, который можно прописать в системных переменных\n```\n\n- [Смотреть анимацию](docs/win_install.md)\n\n#### Прописать в переменных средах:\n\n```text\nПосле команды `python cli.py build`, откроется папка с проектом, и там будет файл `pyoff.exe`, прописать путь этой\nк этой папке в переменных средах, например C:\\Users\\\u003cваше_имя\u003e\\Pyoffline2\\releases\\win\\dist ** Перезагрузить терминал **.\n```\n\n- [Смотреть анимацию](docs/win_variable_path.md)\n\n#### Использование:\n\n```bash\n# базовый кейс (после того как приложение было прописано в системных переменны):\npyoff get-python 3.10 # скачать портативный python в архив (один раз)\npyoff get  fastapi, pydantic # скачать пакеты в архив (для всех python доступных в архиве)\nmkdir my-project # создать папку проекта если её ещё нет\ncd my-project # перейти в папку целевого проекта (здесь для примера такой путь, у вас своя папка)\npyoff init -pv 3.12 # инициализировать проект создав виртуальное окружение\n.venv\\Scripts\\activate # войти в виртуальное окружение проекта (не обязательно)\npyoff project # посмотреть информацию о проекте\npyoff add fastapi, pydantic # установить пакеты в проект (были скачаны занее через pyoff get)\npyoff project # посмотреть информацию о проекте\npip list # проверка что пакеты реально установились\npyoff remove fastapi # Удаление fastapi с очисткой \"сирот\"\npyoff project # посмотреть информацию о проекте\npip list # проверка что fastapi удалился корректно, но pydantic не пострадал\npyoff remove-all # удаление всех пакетов проекта\npyoff tree -st # вывести дерево проекта в терминал (для копирования в буфер укажите флаг -cb)\n```\n\n- [Смотреть анимацию](docs/win_use_case.md)\n\n### На linux:\n\n#### Установка:\n\n```bash\ngit clone https://github.com/Mike2024New/pyoffline2.git # Скачать репозиторий\ncd Pyoffline2 # Перейти в папку с архивом\npython3 -m venv .venv # Создать venv (! Папка должна называться .venv, минимальная версия 3.12)\nsource .venv/bin/activate # Активировать виртуальное окружение\npython start.py # Запустить стартовый скрипт который скачает зависимости проекта.\npython cli.py # Войти в интерфейс приложения.\npython cli.py build # Опционально: для получения исполняемого файла (bin/exe)\n# * - откроется папка с собранным дистрибутивом, который можно прописать в системных переменных\n```\n\n- [Смотреть анимацию](docs/linux_install.md)\n\n#### Прописать в переменных средах:\n\n1. После команды `python cli.py build`, откроется папка с проектом, и там будет файл `pyoff.exe`.\n2. Узнать оболочку `echo $SHELL`\n3. Прописать папку с приложением в системных переменных PATH:\n\n```bash\n# Если оболочка `/bin/bash/`:\necho 'export PATH=\"$PATH:/home/mike/pyoff\"' \u003e\u003e ~/.bashrc\nsource ~/.bashrc\n# проверка что всё корректно\npyoff --help \n```\n\n```bash\n# Если оболочка `/bin/zsh/`:\necho 'export PATH=\"$PATH:/home/mike/pyoff\"' \u003e\u003e ~/.zshrc\nsource ~/.zshrc\n# проверка что всё корректно\npyoff --help \n```\n\n- [Смотреть анимацию](docs/linux_variable_path.md)\n\n#### Использование:\n\n```bash\n# базовый кейс (после того как приложение было прописано в системных переменны):\npyoff get-python 3.10 # скачать портативный python в архив (один раз)\npyoff get  fastapi, pydantic # скачать пакеты в архив (для всех python доступных в архиве)\nmkdir my-project # создать папку проекта если её ещё нет\ncd my-project # перейти в папку целевого проекта (здесь для примера такой путь, у вас своя папка)\npyoff init -pv 3.12 # инициализировать проект создав виртуальное окружение\nsource .venv/bin/activate # войти в виртуальное окружение проекта (не обязательно)\npyoff project # посмотреть информацию о проекте\npyoff add fastapi, pydantic # установить пакеты в проект (были скачаны занее через pyoff get)\npyoff project # посмотреть информацию о проекте\npip list # проверка что пакеты реально установились\npyoff remove fastapi # Удаление fastapi с очисткой \"сирот\"\npyoff project # посмотреть информацию о проекте\npip list # проверка что fastapi удалился корректно, но pydantic не пострадал\npyoff remove-all # удаление всех пакетов проекта\npyoff tree -st # вывести дерево проекта в терминал (для копирования в буфер укажите флаг -cb)\npyoff tree-cfg # открыть папку с файлами конфигурации где в `hidden.json` можно указать пропускаемые папки и файлы с учётом частичного включения '*'\n```\n\n- [Смотреть анимацию](docs/linux_use_case.md)\n\n---\n\n## 💻 Команды\n\nКоманды приложения (в режиме разработки `python cli.py \u003ccommand\u003e`, например `python cli.py show`:\n\n- `show` — просмотр доступных версий Python и пакетов.\n- `get python-dotenv` — скачать пакет для всех версий Python в архиве.\n- `get-from requirements.txt` — скачать список пакетов из файла.\n- `get-python 3.12` — скачать портативный Python-standalone в архив.\n- `update -k 3` — получить latest версии всех пакетов, `-k` удалить все неактуальные кроме 3 последних версий.\n- `init -pv 3.12` — создать проект с виртуальным окружением.\n- `init -pv 3.12 -rp` — пересоздать проект.\n- `add python-dotenv` — установить пакет в целевой проект\n- `remove python-dotenv` — удалить пакет с очисткой сирот\n- `remove-all` — удалить все пакеты из проекта\n- `project` - показать информацию о проекте (версия python, зависимости)\n- `sync` - установить все пакеты из `pyproject.toml` целевого проекта\n- `folder` — открыть папку приложения\n- `run-tests` — запустить тесты *(только из кода, до сборки)*\n- `build` — собрать исполняемый файл *(только из кода, до сборки)*\n- `tree`  — вывести дерево проекта в терминал, (добавить флаги -sc - показать контент, или -cb копировать в буфер\n  обмена)\n- `tree-cfg` — открыть папку с файлами конфигурации где в `hidden.json` можно указать пропускаемые папки и файлы с\n  учётом частичного включения '*'\n\n---\n\n### 📦 Где хранить архив\n\nЕдинственное, что вам нужно решить — где будет лежать папка `resources`. Это может быть:\n\n- Внешний SSD или флешка (берите с собой в поездки)\n- Общая сетевая папка в офисе (для всей команды)\n- Облачный диск (всё равно не понадобится интернет для установки, только для пополнения)\n\n**Никаких настроек серверов, баз данных и Docker-контейнеров.**\n\n---\n\n## 📝 История развития проекта\n\n\u003cdetails\u003e\n  \u003csummary\u003e02.07.2026 - v0.2.1\u003c/summary\u003e\n\n- Добавлена обработка ошибки копирования в буфер (команда tree) для linux.\n\n\u003c/details\u003e\n\n\n\u003cdetails\u003e\n  \u003csummary\u003e02.07.2026 - v0.2.0\u003c/summary\u003e\n\n- Добавлена команда вывода дерева проекта и контента в консоль и копирования в буфер\n  обмена [Смотреть анимацию](docs/tree_instruction.md). Пример дерева (этого проекта):\n\n\u003cdetails\u003e\n```text\n📁 PyOffline2\n├─ 📁 .git [содержимое скрыто]\n├─ 📁 .idea [содержимое скрыто]\n├─ 📁 .pytest_cache [содержимое скрыто]\n├─ 📁 .venv [содержимое скрыто]\n├─ 📁 __pycache__ [содержимое скрыто]\n├─ 📁 config\n│   ├─ 📁 __pycache__ [содержимое скрыто]\n│   ├─ 🐍 __init__.py\n│   └─ 🐍 schemas.py\n├─ 📁 docs\n│   ├─ 📁 assets\n│   │   ├─ 🖼️ installing.gif\n│   │   ├─ 🖼️ linux_installing.gif\n│   │   ├─ 🖼️ linux_use_case.gif\n│   │   ├─ 🖼️ linux_variable_path.gif\n│   │   ├─ 🖼️ path_variables.gif\n│   │   └─ 🖼️ use_case.gif\n│   ├─ 📝 habr_public.md\n│   ├─ 📝 linux_install.md\n│   ├─ 📝 linux_use_case.md\n│   ├─ 📝 linux_variable_path.md\n│   ├─ 📝 win_install.md\n│   ├─ 📝 win_use_case.md\n│   └─ 📝 win_variable_path.md\n├─ 📁 functions\n│   ├─ 📁 __pycache__ [содержимое скрыто]\n│   ├─ 🐍 __init__.py\n│   ├─ 🐍 get_orphan_deps.py\n│   ├─ 🐍 packages_fn.py\n│   ├─ 🐍 python_fn.py\n│   └─ 🐍 toml_manager.py\n├─ 📁 layers\n│   ├─ 📁 __pycache__ [содержимое скрыто]\n│   ├─ 📁 archive_manager\n│   │   ├─ 📁 __pycache__ [содержимое скрыто]\n│   │   ├─ 🐍 __init__.py\n│   │   ├─ 🐍 helper.py\n│   │   └─ 🐍 main.py\n│   ├─ 📁 directory_walker\n│   │   ├─ 📁 __pycache__ [содержимое скрыто]\n│   │   ├─ 🐍 __init__.py\n│   │   └─ 🐍 main.py\n│   ├─ 📁 pack_installer\n│   │   ├─ 📁 __pycache__ [содержимое скрыто]\n│   │   ├─ 🐍 __init__.py\n│   │   └─ 🐍 main.py\n│   ├─ 📁 python_manager\n│   │   ├─ 📁 __pycache__ [содержимое скрыто]\n│   │   ├─ 🐍 __init__.py\n│   │   ├─ 🐍 main.py\n│   │   └─ 🐍 start.py\n│   └─ 🐍 __init__.py\n├─ 📁 logs [содержимое скрыто]\n├─ 📁 python_embed [содержимое скрыто]\n├─ 📁 releases [содержимое скрыто]\n├─ 📁 resources\n│   ├─ 📁 packages_storage\n│   │   └─ 📁 windows-x86_64\n│   │       ├─ 📁 3.10\n│   │       │   ├─ 📁 fastapi==0.139.0\n│   │       │   │   ├─ 📄 annotated_doc-0.0.4-py3-none-any.whl\n│   │       │   │   ├─ 📄 annotated_types-0.7.0-py3-none-any.whl\n│   │       │   │   ├─ 📄 anyio-4.14.1-py3-none-any.whl\n│   │       │   │   ├─ 📄 exceptiongroup-1.3.1-py3-none-any.whl\n│   │       │   │   ├─ 📄 fastapi-0.139.0-py3-none-any.whl\n│   │       │   │   ├─ 📄 idna-3.18-py3-none-any.whl\n│   │       │   │   ├─ 📄 pydantic-2.13.4-py3-none-any.whl\n│   │       │   │   ├─ 📄 pydantic_core-2.46.4-cp310-cp310-win_amd64.whl\n│   │       │   │   ├─ 📄 starlette-1.3.1-py3-none-any.whl\n│   │       │   │   ├─ 📄 typing_extensions-4.16.0-py3-none-any.whl\n│   │       │   │   └─ 📄 typing_inspection-0.4.2-py3-none-any.whl\n│   │       │   ├─ 📁 python_dotenv==1.2.2\n│   │       │   │   └─ 📄 python_dotenv-1.2.2-py3-none-any.whl\n│   │       │   ├─ 📁 requests==2.34.2\n│   │       │   │   ├─ 📄 certifi-2026.6.17-py3-none-any.whl\n│   │       │   │   ├─ 📄 charset_normalizer-3.4.7-cp310-cp310-win_amd64.whl\n│   │       │   │   ├─ 📄 idna-3.18-py3-none-any.whl\n│   │       │   │   ├─ 📄 requests-2.34.2-py3-none-any.whl\n│   │       │   │   └─ 📄 urllib3-2.7.0-py3-none-any.whl\n│   │       │   └─ 📁 uvicorn==0.49.0\n│   │       │       ├─ 📄 click-8.4.2-py3-none-any.whl\n│   │       │       ├─ 📄 colorama-0.4.6-py2.py3-none-any.whl\n│   │       │       ├─ 📄 h11-0.16.0-py3-none-any.whl\n│   │       │       ├─ 📄 typing_extensions-4.16.0-py3-none-any.whl\n│   │       │       └─ 📄 uvicorn-0.49.0-py3-none-any.whl\n│   │       ├─ 📁 3.12\n│   │       │   ├─ 📁 fastapi==0.139.0\n│   │       │   │   ├─ 📄 annotated_doc-0.0.4-py3-none-any.whl\n│   │       │   │   ├─ 📄 annotated_types-0.7.0-py3-none-any.whl\n│   │       │   │   ├─ 📄 anyio-4.14.1-py3-none-any.whl\n│   │       │   │   ├─ 📄 fastapi-0.139.0-py3-none-any.whl\n│   │       │   │   ├─ 📄 idna-3.18-py3-none-any.whl\n│   │       │   │   ├─ 📄 pydantic-2.13.4-py3-none-any.whl\n│   │       │   │   ├─ 📄 pydantic_core-2.46.4-cp312-cp312-win_amd64.whl\n│   │       │   │   ├─ 📄 starlette-1.3.1-py3-none-any.whl\n│   │       │   │   ├─ 📄 typing_extensions-4.16.0-py3-none-any.whl\n│   │       │   │   └─ 📄 typing_inspection-0.4.2-py3-none-any.whl\n│   │       │   ├─ 📁 python_dotenv==1.2.2\n│   │       │   │   └─ 📄 python_dotenv-1.2.2-py3-none-any.whl\n│   │       │   ├─ 📁 requests==2.34.2\n│   │       │   │   ├─ 📄 certifi-2026.6.17-py3-none-any.whl\n│   │       │   │   ├─ 📄 charset_normalizer-3.4.7-cp312-cp312-win_amd64.whl\n│   │       │   │   ├─ 📄 idna-3.18-py3-none-any.whl\n│   │       │   │   ├─ 📄 requests-2.34.2-py3-none-any.whl\n│   │       │   │   └─ 📄 urllib3-2.7.0-py3-none-any.whl\n│   │       │   └─ 📁 uvicorn==0.49.0\n│   │       │       ├─ 📄 click-8.4.2-py3-none-any.whl\n│   │       │       ├─ 📄 colorama-0.4.6-py2.py3-none-any.whl\n│   │       │       ├─ 📄 h11-0.16.0-py3-none-any.whl\n│   │       │       └─ 📄 uvicorn-0.49.0-py3-none-any.whl\n│   │       └─ 📁 3.14\n│   │           ├─ 📁 fastapi==0.139.0\n│   │           │   ├─ 📄 annotated_doc-0.0.4-py3-none-any.whl\n│   │           │   ├─ 📄 annotated_types-0.7.0-py3-none-any.whl\n│   │           │   ├─ 📄 anyio-4.14.1-py3-none-any.whl\n│   │           │   ├─ 📄 fastapi-0.139.0-py3-none-any.whl\n│   │           │   ├─ 📄 idna-3.18-py3-none-any.whl\n│   │           │   ├─ 📄 pydantic-2.13.4-py3-none-any.whl\n│   │           │   ├─ 📄 pydantic_core-2.46.4-cp314-cp314-win_amd64.whl\n│   │           │   ├─ 📄 starlette-1.3.1-py3-none-any.whl\n│   │           │   ├─ 📄 typing_extensions-4.16.0-py3-none-any.whl\n│   │           │   └─ 📄 typing_inspection-0.4.2-py3-none-any.whl\n│   │           ├─ 📁 python_dotenv==1.2.2\n│   │           │   └─ 📄 python_dotenv-1.2.2-py3-none-any.whl\n│   │           ├─ 📁 requests==2.34.2\n│   │           │   ├─ 📄 certifi-2026.6.17-py3-none-any.whl\n│   │           │   ├─ 📄 charset_normalizer-3.4.7-cp314-cp314-win_amd64.whl\n│   │           │   ├─ 📄 idna-3.18-py3-none-any.whl\n│   │           │   ├─ 📄 requests-2.34.2-py3-none-any.whl\n│   │           │   └─ 📄 urllib3-2.7.0-py3-none-any.whl\n│   │           └─ 📁 uvicorn==0.49.0\n│   │               ├─ 📄 click-8.4.2-py3-none-any.whl\n│   │               ├─ 📄 colorama-0.4.6-py2.py3-none-any.whl\n│   │               ├─ 📄 h11-0.16.0-py3-none-any.whl\n│   │               └─ 📄 uvicorn-0.49.0-py3-none-any.whl\n│   └─ 📁 python_storage\n│       └─ 📁 windows-x86_64\n│           ├─ 📁 3.10\n│           │   └─ 📁 python [содержимое скрыто]\n│           ├─ 📁 3.12\n│           │   └─ 📁 python [содержимое скрыто]\n│           └─ 📁 3.14\n│               └─ 📁 python [содержимое скрыто]\n├─ 📁 tests\n│   ├─ 📁 __pycache__ [содержимое скрыто]\n│   ├─ 🐍 test_archive_packages.py\n│   ├─ 🐍 test_init_project.py\n│   └─ 🐍 test_python.py\n├─ 📁 tree_cfg\n│   ├─ 📄 hidden.json\n│   └─ 📄 icons.json\n├─ 🔒 .gitignore\n├─ 📄 .python-version\n├─ 🐍 build.py\n├─ 🐍 cli.py\n├─ 🐍 helper.py\n├─ 📄 LICENSE\n├─ 📄 pyproject.toml\n├─ 📝 README.md\n├─ 🐍 start.py\n└─ 📄 todo.txt\n```\n\u003c/details\u003e\n\n\n\u003c/details\u003e\n\n---\n\n\n---\n\n## 📜 Лицензия\n\nMIT. Подробнее в файле [LICENSE](LICENSE).\n\n---\n\n## Примечания\n\n- Проект использует утилиты из репозитория [infrastructure](https://github.com/Mike2024New/infrastructure.git).\n- Протестировано на windows10, linux ubuntu/mint.\n- Любая обратная связь приветствуется.\n\n\u003e \"Если пользователь не понял — я объяснил плохо. Значит, мне нужно переписать документацию, добавить примеры, улучшить\n\u003e сообщения об ошибках.\"\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmike2024new%2Fpyoffline2","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmike2024new%2Fpyoffline2","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmike2024new%2Fpyoffline2/lists"}