An open API service indexing awesome lists of open source software.

https://github.com/mike2024new/pyoffline2

Portable offline Python package manager — download once, use anywhere
https://github.com/mike2024new/pyoffline2

devtools offline packages-manager pip portable pypi python virtual-environment

Last synced: 1 day ago
JSON representation

Portable offline Python package manager — download once, use anywhere

Awesome Lists containing this project

README

          

# PyOffline2

**Переносимый офлайн-менеджер Python-пакетов**

---

## Содержание

- [О проекте](#о-проекте)
- [Целевая аудитория](#-целевая-аудитория)
- [Что умеет](#-что-умеет)
- [Важно](#-важно)
- [Быстрый старт](#-быстрый-старт)
- [Команды](#-команды)
- [Где хранить архив](#-где-хранить-архив)
- [История развития проекта](#-история-развития-проекта)
- [Лицензия](#-лицензия)
- [Примечания](#примечания)

---

## О проекте

**pyoffline** — автономный менеджер Python-окружений, которому не нужен постоянный доступ к интернету.

Кратко:

> PyOffline2 — ваш переносимый «чемоданчик судного дня» для Python-разработки. Один раз, пока есть интернет, скачайте
> нужные версии Python (портативные, без глобальной установки) и все необходимые пакеты из PyPI в локальный архив.
> Никаких
> серверов, баз данных и сложного развёртывания — всё работает из коробки, запускается за пару минут и не требует
> специальных знаний. Дальше создавайте проекты где угодно, полностью офлайн, вообще без интернета. Нестабильная связь,
> долгая загрузка или внезапная недоступность репозиториев перестают быть проблемой — всё уже у вас под рукой. При этом
> PyOffline2 не заменяет uv или pip, а дополняет их, работая параллельно и не вмешиваясь в привычный вам процесс.

Термины использующиеся далее:

- `архив` - подразумевается папка resources в которую скачиваются портативные версии python (resources/python_strage),
и пакеты (resourcs/packages_storage), то есть те ресурсы которые сохраняются и могут использоваться в том числе
оффлайн.

- `проект` - папка с кодом python и своим виртуальным окружением которое может быть создано через `pyoff init` на базе
python из архива (из папки python_storage), в него устанавливаются проекты из архива (packages_storage).

```text
┌─────────────────────────────────────────────────────────────────┐
│ АРХИВ (resources/) │
│ ┌───────────────────┐ ┌───────────────────────────────────┐ │
│ │ python_storage/ │ │ packages_storage/ │ │
│ │ 3.10/ │ │ 3.10/ │ │
│ │ 3.12/ │ │ fastapi/ requests/ │ │
│ │ 3.14/ │ │ 3.12/ │ │
│ └───────────────────┘ │ fastapi/ requests/ │ │
│ └───────────────────────────────────┘ │
│ │
│ Заранее запасенные python-portable дистрибутивы, и пакеты с │
│ pypi.org │
│ │
└─────────────────────────────────────────────────────────────────┘

│ pyoff init -pv 3.12
│ pyoff add fastapi

┌─────────────────────────────────────────────────────────────────┐
│ ПРОЕКТ (my-project/) │
│ ┌───────────────────────────────────────────────────────────┐ │
│ │ .venv/ (виртуальное окружение на базе Python 3.12) │ │
│ │ pyproject.toml (зависимости: fastapi==0.138.0) │ │
│ └───────────────────────────────────────────────────────────┘ │
│ │
│ Пользовательский проект, пересоздаваемая единица, использующая, │
│ ресурсы из resources. │
│ │
└─────────────────────────────────────────────────────────────────┘
```

Подробно:

В современном мире мы привыкли полагаться на облака, CDN и глобальные репозитории. Это удобно, пока связь стабильна. Но
что происходит, когда:

- интернет медленный, нестабильный или отсутствует?
- нужно развернуть десяток проектов, а каждый `pip install` заново качает гигабайты?
- критически важные пакеты вдруг становятся недоступны по независящим от вас причинам? (потеря связи с PyPi.org,
Python.org, блокировки, политика... Другие обстоятельства.)

pyoffline даёт простой ответ: **один раз скачал — пользуешься везде**.

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

#### Версии python скачиваются под конкретную версию вашей ОС (проверено на windows 10, linux ubuntu/mint):

Например результат выполнения команды `get-python 3.10` :

```text
...
├─ 📁 resources
│ ├── 📁 python_storage
│ │ └── 📁 windows-x86_64 <- действие было выполнено на windows
│ │ ├── 📁 3.10 <- добавлен python 3.10 (результат `get-python 3.10`)
│ │ │ └── 📃 ...
│ │ ├── 📁 3.12
│ │ │ └── 📃 ...
│ │ ├── 📁 3.14
│ │ │ └── 📃 ...
...
```

#### Скачиваемые в архив пакеты распределяются по версиям python.

Например результат выполнения команды `get python-dotenv, requests` :

```text
...
├─ 📁 resources
│ ├─ 📁 packages_storage
│ │ └─ 📁 windows-x86_64 <- действие было выполнено на windows
│ │ ├─ 📁 3.10
│ │ │ ├─ 📁 python_dotenv==1.2.2
│ │ │ │ └─ 📦 python_dotenv-1.2.2-py3-none-any.whl
│ │ │ └─ 📁 requests==2.34.2
│ │ │ ├─ 📦 certifi-2026.6.17-py3-none-any.whl
│ │ │ ├─ 📦 charset_normalizer-3.4.7-cp310-cp310-win_amd64.whl
│ │ │ ├─ 📦 idna-3.18-py3-none-any.whl
│ │ │ ├─ 📦 requests-2.34.2-py3-none-any.whl
│ │ │ └─ 📦 urllib3-2.7.0-py3-none-any.whl
│ │ ├─ 📁 3.12
│ │ │ ├─ 📁 python_dotenv==1.2.2
│ │ │ │ └─ 📦 python_dotenv-1.2.2-py3-none-any.whl
│ │ │ └─ 📁 requests==2.34.2
│ │ │ ├─ 📦 certifi-2026.6.17-py3-none-any.whl
│ │ │ ├─ 📦 charset_normalizer-3.4.7-cp312-cp312-win_amd64.whl
│ │ │ ├─ 📦 idna-3.18-py3-none-any.whl
│ │ │ ├─ 📦 requests-2.34.2-py3-none-any.whl
│ │ │ └─ 📦 urllib3-2.7.0-py3-none-any.whl
│ │ └─ 📁 3.14
│ │ ├─ 📁 python_dotenv==1.2.2
│ │ │ └─ 📦 python_dotenv-1.2.2-py3-none-any.whl
│ │ └─ 📁 requests==2.34.2
│ │ ├─ 📦 certifi-2026.6.17-py3-none-any.whl
│ │ ├─ 📦 charset_normalizer-3.4.7-cp314-cp314-win_amd64.whl
│ │ ├─ 📦 idna-3.18-py3-none-any.whl
│ │ ├─ 📦 requests-2.34.2-py3-none-any.whl
│ │ └─ 📦 urllib3-2.7.0-py3-none-any.whl
...
```

Пакеты скачались на все версии Python и распределились в каталоге resources. Транзитивные зависимости также
подхватываются.

### P.S.

> *Я искренне надеюсь, что использование этого проекта ограничится потребностью развернуть проект там, где временно
> плохой интернет — например, у бабушки в деревне. Но всякое бывает, и лучше иметь и не нуждаться, чем нуждаться и не
> иметь.*

---

## 👥 Целевая аудитория

- Хобби- и соло-разработчики
- Небольшие команды
- Все, кто не хочет поднимать промышленные серверные решения ради сохранения набора любимых библиотек

---

## 🚀 Что умеет

- 🐍 **Скачивать Python** — портативные сборки
с [python-build-standalone](https://github.com/astral-sh/python-build-standalone/releases) через `getpybs`
- 🐍 **Создавать виртуальные окружения** на целевой машине: `init -pv 3.12`
- 📦 **Скачивать пакеты с PyPI** и распределять их по версиям Python: `get fastapi uvicorn` или
`get-from requirements.txt`
- 📦 **Устанавливать пакеты в целевой проект** `add fastapi uvicorn` или `add passlib[argon2]` (работает с
`pyproject.toml`)
- 📦 **Обновлять уже скачанные пакеты** `update` а если добавить флаг `keep`, то старые версии будут удаляться, останется
только указанное число последних версий не раздувая архив.
- 🧹 **Удалять пакеты из целевого проекта с очисткой зависимостей-сирот** — аналог `uv remove`, только полностью офлайн.
Удаляет то, что
больше не используется ни одним другим пакетом
- 📖 **Вести структурированный (машиночитаемый) лог** о выполненных операциях корневая папка logs команда `folder`, чтобы
открыть корневую папку приложения.
- 📂 **Выводить дерево проекта и копировать контент** в буфер обмена. Удобно для обзора проекта, и для чата с
ИИ. [Смотреть анимацию](docs/tree_instruction.md)

---

## ⚠️ Важно

PyOffline2 **не обходит блокировки** и **не восстанавливает доступ** к PyPI или python.org. Он лишь позволяет
**сохранить пакеты заранее**, пока связь ещё есть — то есть «подстелить соломку» на случай возможных ограничений. Пока
есть соединение с PyPi.org вы делаете свой чемоданчик судного дня.

PyOffline2 не конкурирует с `uv`, `pip` и другими инструментами. Он опирается на их сильные стороны и дополняет их,
адаптируя под конкретную задачу: **работа без связи с pypi.org и python.org**.

Для windows/linux качаются разные whl и python.

---

## ⚡ Быстрый старт

Переходим сразу к делу:

### На windows:

#### Установка:

```bash
git clone https://github.com/Mike2024New/pyoffline2.git # Скачать репозиторий
cd Pyoffline2 # Перейти в папку с архивом
python -m venv .venv # Создать venv (! Папка должна называться .venv, минимальная версия 3.12)
.venv/Scripts/activate # Активировать виртуальное окружение:
python start.py # Запустить стартовый скрипт который скачает зависимости проекта.
python cli.py --help # Войти в интерфейс приложения.
# 7. Опционально: для получения исполняемого файла (bin/exe):
python cli.py build # сборка .exe
# * - откроется папка с собранным дистрибутивом, который можно прописать в системных переменных
```

- [Смотреть анимацию](docs/win_install.md)

#### Прописать в переменных средах:

```text
После команды `python cli.py build`, откроется папка с проектом, и там будет файл `pyoff.exe`, прописать путь этой
к этой папке в переменных средах, например C:\Users\<ваше_имя>\Pyoffline2\releases\win\dist ** Перезагрузить терминал **.
```

- [Смотреть анимацию](docs/win_variable_path.md)

#### Использование:

```bash
# базовый кейс (после того как приложение было прописано в системных переменны):
pyoff get-python 3.10 # скачать портативный python в архив (один раз)
pyoff get fastapi, pydantic # скачать пакеты в архив (для всех python доступных в архиве)
mkdir my-project # создать папку проекта если её ещё нет
cd my-project # перейти в папку целевого проекта (здесь для примера такой путь, у вас своя папка)
pyoff init -pv 3.12 # инициализировать проект создав виртуальное окружение
.venv\Scripts\activate # войти в виртуальное окружение проекта (не обязательно)
pyoff project # посмотреть информацию о проекте
pyoff add fastapi, pydantic # установить пакеты в проект (были скачаны занее через pyoff get)
pyoff project # посмотреть информацию о проекте
pip list # проверка что пакеты реально установились
pyoff remove fastapi # Удаление fastapi с очисткой "сирот"
pyoff project # посмотреть информацию о проекте
pip list # проверка что fastapi удалился корректно, но pydantic не пострадал
pyoff remove-all # удаление всех пакетов проекта
pyoff tree -st # вывести дерево проекта в терминал (для копирования в буфер укажите флаг -cb)
```

- [Смотреть анимацию](docs/win_use_case.md)

### На linux:

#### Установка:

```bash
git clone https://github.com/Mike2024New/pyoffline2.git # Скачать репозиторий
cd Pyoffline2 # Перейти в папку с архивом
python3 -m venv .venv # Создать venv (! Папка должна называться .venv, минимальная версия 3.12)
source .venv/bin/activate # Активировать виртуальное окружение
python start.py # Запустить стартовый скрипт который скачает зависимости проекта.
python cli.py # Войти в интерфейс приложения.
python cli.py build # Опционально: для получения исполняемого файла (bin/exe)
# * - откроется папка с собранным дистрибутивом, который можно прописать в системных переменных
```

- [Смотреть анимацию](docs/linux_install.md)

#### Прописать в переменных средах:

1. После команды `python cli.py build`, откроется папка с проектом, и там будет файл `pyoff.exe`.
2. Узнать оболочку `echo $SHELL`
3. Прописать папку с приложением в системных переменных PATH:

```bash
# Если оболочка `/bin/bash/`:
echo 'export PATH="$PATH:/home/mike/pyoff"' >> ~/.bashrc
source ~/.bashrc
# проверка что всё корректно
pyoff --help
```

```bash
# Если оболочка `/bin/zsh/`:
echo 'export PATH="$PATH:/home/mike/pyoff"' >> ~/.zshrc
source ~/.zshrc
# проверка что всё корректно
pyoff --help
```

- [Смотреть анимацию](docs/linux_variable_path.md)

#### Использование:

```bash
# базовый кейс (после того как приложение было прописано в системных переменны):
pyoff get-python 3.10 # скачать портативный python в архив (один раз)
pyoff get fastapi, pydantic # скачать пакеты в архив (для всех python доступных в архиве)
mkdir my-project # создать папку проекта если её ещё нет
cd my-project # перейти в папку целевого проекта (здесь для примера такой путь, у вас своя папка)
pyoff init -pv 3.12 # инициализировать проект создав виртуальное окружение
source .venv/bin/activate # войти в виртуальное окружение проекта (не обязательно)
pyoff project # посмотреть информацию о проекте
pyoff add fastapi, pydantic # установить пакеты в проект (были скачаны занее через pyoff get)
pyoff project # посмотреть информацию о проекте
pip list # проверка что пакеты реально установились
pyoff remove fastapi # Удаление fastapi с очисткой "сирот"
pyoff project # посмотреть информацию о проекте
pip list # проверка что fastapi удалился корректно, но pydantic не пострадал
pyoff remove-all # удаление всех пакетов проекта
pyoff tree -st # вывести дерево проекта в терминал (для копирования в буфер укажите флаг -cb)
pyoff tree-cfg # открыть папку с файлами конфигурации где в `hidden.json` можно указать пропускаемые папки и файлы с учётом частичного включения '*'
```

- [Смотреть анимацию](docs/linux_use_case.md)

---

## 💻 Команды

Команды приложения (в режиме разработки `python cli.py `, например `python cli.py show`:

- `show` — просмотр доступных версий Python и пакетов.
- `get python-dotenv` — скачать пакет для всех версий Python в архиве.
- `get-from requirements.txt` — скачать список пакетов из файла.
- `get-python 3.12` — скачать портативный Python-standalone в архив.
- `update -k 3` — получить latest версии всех пакетов, `-k` удалить все неактуальные кроме 3 последних версий.
- `init -pv 3.12` — создать проект с виртуальным окружением.
- `init -pv 3.12 -rp` — пересоздать проект.
- `add python-dotenv` — установить пакет в целевой проект
- `remove python-dotenv` — удалить пакет с очисткой сирот
- `remove-all` — удалить все пакеты из проекта
- `project` - показать информацию о проекте (версия python, зависимости)
- `sync` - установить все пакеты из `pyproject.toml` целевого проекта
- `folder` — открыть папку приложения
- `run-tests` — запустить тесты *(только из кода, до сборки)*
- `build` — собрать исполняемый файл *(только из кода, до сборки)*
- `tree` — вывести дерево проекта в терминал, (добавить флаги -sc - показать контент, или -cb копировать в буфер
обмена)
- `tree-cfg` — открыть папку с файлами конфигурации где в `hidden.json` можно указать пропускаемые папки и файлы с
учётом частичного включения '*'

---

### 📦 Где хранить архив

Единственное, что вам нужно решить — где будет лежать папка `resources`. Это может быть:

- Внешний SSD или флешка (берите с собой в поездки)
- Общая сетевая папка в офисе (для всей команды)
- Облачный диск (всё равно не понадобится интернет для установки, только для пополнения)

**Никаких настроек серверов, баз данных и Docker-контейнеров.**

---

## 📝 История развития проекта

02.07.2026 - v0.2.1

- Добавлена обработка ошибки копирования в буфер (команда tree) для linux.

02.07.2026 - v0.2.0

- Добавлена команда вывода дерева проекта и контента в консоль и копирования в буфер
обмена [Смотреть анимацию](docs/tree_instruction.md). Пример дерева (этого проекта):

```text
📁 PyOffline2
├─ 📁 .git [содержимое скрыто]
├─ 📁 .idea [содержимое скрыто]
├─ 📁 .pytest_cache [содержимое скрыто]
├─ 📁 .venv [содержимое скрыто]
├─ 📁 __pycache__ [содержимое скрыто]
├─ 📁 config
│ ├─ 📁 __pycache__ [содержимое скрыто]
│ ├─ 🐍 __init__.py
│ └─ 🐍 schemas.py
├─ 📁 docs
│ ├─ 📁 assets
│ │ ├─ 🖼️ installing.gif
│ │ ├─ 🖼️ linux_installing.gif
│ │ ├─ 🖼️ linux_use_case.gif
│ │ ├─ 🖼️ linux_variable_path.gif
│ │ ├─ 🖼️ path_variables.gif
│ │ └─ 🖼️ use_case.gif
│ ├─ 📝 habr_public.md
│ ├─ 📝 linux_install.md
│ ├─ 📝 linux_use_case.md
│ ├─ 📝 linux_variable_path.md
│ ├─ 📝 win_install.md
│ ├─ 📝 win_use_case.md
│ └─ 📝 win_variable_path.md
├─ 📁 functions
│ ├─ 📁 __pycache__ [содержимое скрыто]
│ ├─ 🐍 __init__.py
│ ├─ 🐍 get_orphan_deps.py
│ ├─ 🐍 packages_fn.py
│ ├─ 🐍 python_fn.py
│ └─ 🐍 toml_manager.py
├─ 📁 layers
│ ├─ 📁 __pycache__ [содержимое скрыто]
│ ├─ 📁 archive_manager
│ │ ├─ 📁 __pycache__ [содержимое скрыто]
│ │ ├─ 🐍 __init__.py
│ │ ├─ 🐍 helper.py
│ │ └─ 🐍 main.py
│ ├─ 📁 directory_walker
│ │ ├─ 📁 __pycache__ [содержимое скрыто]
│ │ ├─ 🐍 __init__.py
│ │ └─ 🐍 main.py
│ ├─ 📁 pack_installer
│ │ ├─ 📁 __pycache__ [содержимое скрыто]
│ │ ├─ 🐍 __init__.py
│ │ └─ 🐍 main.py
│ ├─ 📁 python_manager
│ │ ├─ 📁 __pycache__ [содержимое скрыто]
│ │ ├─ 🐍 __init__.py
│ │ ├─ 🐍 main.py
│ │ └─ 🐍 start.py
│ └─ 🐍 __init__.py
├─ 📁 logs [содержимое скрыто]
├─ 📁 python_embed [содержимое скрыто]
├─ 📁 releases [содержимое скрыто]
├─ 📁 resources
│ ├─ 📁 packages_storage
│ │ └─ 📁 windows-x86_64
│ │ ├─ 📁 3.10
│ │ │ ├─ 📁 fastapi==0.139.0
│ │ │ │ ├─ 📄 annotated_doc-0.0.4-py3-none-any.whl
│ │ │ │ ├─ 📄 annotated_types-0.7.0-py3-none-any.whl
│ │ │ │ ├─ 📄 anyio-4.14.1-py3-none-any.whl
│ │ │ │ ├─ 📄 exceptiongroup-1.3.1-py3-none-any.whl
│ │ │ │ ├─ 📄 fastapi-0.139.0-py3-none-any.whl
│ │ │ │ ├─ 📄 idna-3.18-py3-none-any.whl
│ │ │ │ ├─ 📄 pydantic-2.13.4-py3-none-any.whl
│ │ │ │ ├─ 📄 pydantic_core-2.46.4-cp310-cp310-win_amd64.whl
│ │ │ │ ├─ 📄 starlette-1.3.1-py3-none-any.whl
│ │ │ │ ├─ 📄 typing_extensions-4.16.0-py3-none-any.whl
│ │ │ │ └─ 📄 typing_inspection-0.4.2-py3-none-any.whl
│ │ │ ├─ 📁 python_dotenv==1.2.2
│ │ │ │ └─ 📄 python_dotenv-1.2.2-py3-none-any.whl
│ │ │ ├─ 📁 requests==2.34.2
│ │ │ │ ├─ 📄 certifi-2026.6.17-py3-none-any.whl
│ │ │ │ ├─ 📄 charset_normalizer-3.4.7-cp310-cp310-win_amd64.whl
│ │ │ │ ├─ 📄 idna-3.18-py3-none-any.whl
│ │ │ │ ├─ 📄 requests-2.34.2-py3-none-any.whl
│ │ │ │ └─ 📄 urllib3-2.7.0-py3-none-any.whl
│ │ │ └─ 📁 uvicorn==0.49.0
│ │ │ ├─ 📄 click-8.4.2-py3-none-any.whl
│ │ │ ├─ 📄 colorama-0.4.6-py2.py3-none-any.whl
│ │ │ ├─ 📄 h11-0.16.0-py3-none-any.whl
│ │ │ ├─ 📄 typing_extensions-4.16.0-py3-none-any.whl
│ │ │ └─ 📄 uvicorn-0.49.0-py3-none-any.whl
│ │ ├─ 📁 3.12
│ │ │ ├─ 📁 fastapi==0.139.0
│ │ │ │ ├─ 📄 annotated_doc-0.0.4-py3-none-any.whl
│ │ │ │ ├─ 📄 annotated_types-0.7.0-py3-none-any.whl
│ │ │ │ ├─ 📄 anyio-4.14.1-py3-none-any.whl
│ │ │ │ ├─ 📄 fastapi-0.139.0-py3-none-any.whl
│ │ │ │ ├─ 📄 idna-3.18-py3-none-any.whl
│ │ │ │ ├─ 📄 pydantic-2.13.4-py3-none-any.whl
│ │ │ │ ├─ 📄 pydantic_core-2.46.4-cp312-cp312-win_amd64.whl
│ │ │ │ ├─ 📄 starlette-1.3.1-py3-none-any.whl
│ │ │ │ ├─ 📄 typing_extensions-4.16.0-py3-none-any.whl
│ │ │ │ └─ 📄 typing_inspection-0.4.2-py3-none-any.whl
│ │ │ ├─ 📁 python_dotenv==1.2.2
│ │ │ │ └─ 📄 python_dotenv-1.2.2-py3-none-any.whl
│ │ │ ├─ 📁 requests==2.34.2
│ │ │ │ ├─ 📄 certifi-2026.6.17-py3-none-any.whl
│ │ │ │ ├─ 📄 charset_normalizer-3.4.7-cp312-cp312-win_amd64.whl
│ │ │ │ ├─ 📄 idna-3.18-py3-none-any.whl
│ │ │ │ ├─ 📄 requests-2.34.2-py3-none-any.whl
│ │ │ │ └─ 📄 urllib3-2.7.0-py3-none-any.whl
│ │ │ └─ 📁 uvicorn==0.49.0
│ │ │ ├─ 📄 click-8.4.2-py3-none-any.whl
│ │ │ ├─ 📄 colorama-0.4.6-py2.py3-none-any.whl
│ │ │ ├─ 📄 h11-0.16.0-py3-none-any.whl
│ │ │ └─ 📄 uvicorn-0.49.0-py3-none-any.whl
│ │ └─ 📁 3.14
│ │ ├─ 📁 fastapi==0.139.0
│ │ │ ├─ 📄 annotated_doc-0.0.4-py3-none-any.whl
│ │ │ ├─ 📄 annotated_types-0.7.0-py3-none-any.whl
│ │ │ ├─ 📄 anyio-4.14.1-py3-none-any.whl
│ │ │ ├─ 📄 fastapi-0.139.0-py3-none-any.whl
│ │ │ ├─ 📄 idna-3.18-py3-none-any.whl
│ │ │ ├─ 📄 pydantic-2.13.4-py3-none-any.whl
│ │ │ ├─ 📄 pydantic_core-2.46.4-cp314-cp314-win_amd64.whl
│ │ │ ├─ 📄 starlette-1.3.1-py3-none-any.whl
│ │ │ ├─ 📄 typing_extensions-4.16.0-py3-none-any.whl
│ │ │ └─ 📄 typing_inspection-0.4.2-py3-none-any.whl
│ │ ├─ 📁 python_dotenv==1.2.2
│ │ │ └─ 📄 python_dotenv-1.2.2-py3-none-any.whl
│ │ ├─ 📁 requests==2.34.2
│ │ │ ├─ 📄 certifi-2026.6.17-py3-none-any.whl
│ │ │ ├─ 📄 charset_normalizer-3.4.7-cp314-cp314-win_amd64.whl
│ │ │ ├─ 📄 idna-3.18-py3-none-any.whl
│ │ │ ├─ 📄 requests-2.34.2-py3-none-any.whl
│ │ │ └─ 📄 urllib3-2.7.0-py3-none-any.whl
│ │ └─ 📁 uvicorn==0.49.0
│ │ ├─ 📄 click-8.4.2-py3-none-any.whl
│ │ ├─ 📄 colorama-0.4.6-py2.py3-none-any.whl
│ │ ├─ 📄 h11-0.16.0-py3-none-any.whl
│ │ └─ 📄 uvicorn-0.49.0-py3-none-any.whl
│ └─ 📁 python_storage
│ └─ 📁 windows-x86_64
│ ├─ 📁 3.10
│ │ └─ 📁 python [содержимое скрыто]
│ ├─ 📁 3.12
│ │ └─ 📁 python [содержимое скрыто]
│ └─ 📁 3.14
│ └─ 📁 python [содержимое скрыто]
├─ 📁 tests
│ ├─ 📁 __pycache__ [содержимое скрыто]
│ ├─ 🐍 test_archive_packages.py
│ ├─ 🐍 test_init_project.py
│ └─ 🐍 test_python.py
├─ 📁 tree_cfg
│ ├─ 📄 hidden.json
│ └─ 📄 icons.json
├─ 🔒 .gitignore
├─ 📄 .python-version
├─ 🐍 build.py
├─ 🐍 cli.py
├─ 🐍 helper.py
├─ 📄 LICENSE
├─ 📄 pyproject.toml
├─ 📝 README.md
├─ 🐍 start.py
└─ 📄 todo.txt
```

---

---

## 📜 Лицензия

MIT. Подробнее в файле [LICENSE](LICENSE).

---

## Примечания

- Проект использует утилиты из репозитория [infrastructure](https://github.com/Mike2024New/infrastructure.git).
- Протестировано на windows10, linux ubuntu/mint.
- Любая обратная связь приветствуется.

> "Если пользователь не понял — я объяснил плохо. Значит, мне нужно переписать документацию, добавить примеры, улучшить
> сообщения об ошибках."