Tool for running legacy Python scripts in isolated virtual environments
Project description
PythonDocker
PythonDocker — инструмент для запуска старых Python скриптов (включая Python 2.x) в изолированных виртуальных окружениях с автоматическим определением версии Python. Работает без Docker, используя только стандартную библиотеку Python.
Содержание
- Описание
- Возможности
- Требования
- Установка
- Использование
- Примеры
- Архитектура
- Поддерживаемые версии Python
- Управление окружениями
- Решение проблем
- Разработка
- Лицензия
- Авторы
Описание
PythonDocker решает проблему запуска устаревших Python скриптов, которые требуют специфических версий Python (например, Python 2.7). Программа автоматически:
- Определяет необходимую версию Python из скрипта
- Скачивает и устанавливает нужную версию Python (если отсутствует)
- Создает изолированное виртуальное окружение
- Устанавливает зависимости из
requirements.txt - Запускает скрипт в изолированном окружении
Важно: PythonDocker не использует Docker. Вместо этого применяются виртуальные окружения Python и автоматическое управление версиями интерпретатора.
Возможности
- Автоматическое определение версии Python — анализ shebang, комментариев и синтаксиса
- Изоляция через виртуальные окружения — каждый скрипт запускается в отдельном окружении
- Автоматическая установка зависимостей — поддержка
requirements.txt - Автоматическое скачивание Python — загрузка нужных версий с python.org
- Поддержка кодировок — автоматическое определение и управление кодировками (UTF-8, CP1251, CP866 и др.)
- Простой CLI интерфейс — интуитивно понятные команды
- Работает без Docker — использует только стандартную библиотеку Python
- Кроссплатформенность — поддержка Windows, Linux и macOS
- Управление окружениями — команды для просмотра, очистки и удаления окружений
Требования
- Python 3.7+ (для запуска программы PythonDocker)
- Доступ к интернету (для скачивания версий Python при первом использовании)
- Место на диске (~100-200 МБ на версию Python)
- Docker НЕ требуется
Установка
Установка из исходников
# Клонируйте репозиторий
git clone https://github.com/thenola/pythondocker.git
cd pythondocker
# Установите пакет в режиме разработки
pip install -e .
# Или выполните обычную установку
python setup.py install
Установка через pip (если доступно)
pip install pythondocker
После установки команда pythondocker будет доступна в командной строке.
Примечание: При первом запуске программа автоматически скачает нужную версию Python, если она отсутствует локально.
Использование
Базовое использование
# Автоматическое определение версии Python из скрипта
pythondocker script.py
# Указать версию Python вручную
pythondocker script.py --python 2.7
# Запуск с зависимостями из requirements.txt
pythondocker script.py --requirements requirements.txt
# Передача аргументов скрипту
pythondocker script.py --args arg1 arg2 arg3
# Установка переменных окружения
pythondocker script.py --env KEY1=value1 KEY2=value2
# Указание кодировки (полезно для Windows)
pythondocker script.py --encoding cp1251
# Подробный вывод (для отладки)
pythondocker script.py --verbose
# Пересоздание окружения
pythondocker script.py --force-recreate
Параметры командной строки
| Параметр | Краткая форма | Описание |
|---|---|---|
--python |
-p |
Версия Python (например, 2.7, 3.11) |
--requirements |
-r |
Путь к файлу requirements.txt |
--args |
- | Аргументы для передаваемые скрипту |
--env |
- | Переменные окружения в формате KEY=VALUE |
--encoding |
-e |
Кодировка для запуска скрипта (utf-8, cp1251, cp866 и др.) |
--verbose |
-v |
Подробный вывод |
--force-recreate |
- | Пересоздать окружение если оно уже существует |
Примеры
Пример 1: Запуск Python 2 скрипта
Создайте файл old_script.py:
#!/usr/bin/env python2.7
# -*- coding: utf-8 -*-
print "Hello from Python 2.7!"
Запустите:
pythondocker old_script.py
PythonDocker автоматически определит версию Python 2.7 из shebang и запустит скрипт.
Пример 2: Запуск с зависимостями
Создайте файл requirements.txt:
requests==2.28.0
numpy==1.21.0
Запустите:
pythondocker script.py --requirements requirements.txt
Программа автоматически установит зависимости в изолированное окружение.
Пример 3: Запуск с аргументами и переменными окружения
pythondocker process_data.py --args input.txt output.txt --env DEBUG=true API_KEY=secret123
Пример 4: Работа с кодировкой CP1251 (Windows)
pythondocker script.py --python 2.7 --encoding cp1251
Пример 5: Указание версии Python вручную
pythondocker script.py --python 3.9
Архитектура
Как работает PythonDocker
-
Определение версии Python:
- Проверка shebang строки (
#!/usr/bin/env python2.7) - Поиск комментариев с указанием версии (
# Requires Python 2.7) - Анализ синтаксиса (поиск признаков Python 2:
printбез скобок,xrange(),raw_input()и др.)
- Проверка shebang строки (
-
Подготовка окружения:
- Проверка наличия нужной версии Python локально
- Скачивание версии с python.org (если отсутствует)
- Создание изолированного виртуального окружения
- Установка зависимостей из
requirements.txt(если указан)
-
Запуск скрипта:
- Запуск скрипта в изолированном виртуальном окружении
- Использование правильной версии Python
- Передача аргументов и переменных окружения
- Настройка кодировки для ввода/вывода
-
Хранение данных:
- Версии Python хранятся в
~/.pythondocker/python/ - Виртуальные окружения создаются в
~/.pythondocker/envs/ - Окружения переиспользуются между запусками
- Версии Python хранятся в
Определение версии Python
PythonDocker определяет версию Python следующими способами (в порядке приоритета):
-
Shebang строка:
#!/usr/bin/env python2.7 -
Комментарии:
# Requires Python 2.7,# Python version: 2.7 -
Анализ синтаксиса: поиск признаков Python 2:
printбез скобокxrange()вместоrange()dict.iteritems(),dict.iterkeys(),dict.itervalues()raw_input()вместоinput()unicode()функцияbasestringтип- и другие характерные конструкции
-
По умолчанию: если версия не определена, используется Python 3.11
Поддерживаемые версии Python
PythonDocker поддерживает все версии Python, доступные на python.org:
- Python 2.x: 2.7 (последняя версия Python 2)
- Python 3.x: 3.6, 3.7, 3.8, 3.9, 3.10, 3.11, 3.12, 3.13+
Программа автоматически скачивает нужную версию для вашей платформы (Windows, Linux, macOS).
Управление окружениями
PythonDocker предоставляет команды для управления окружениями:
Просмотр списка окружений
pythondocker list
Выводит список всех созданных окружений с информацией о версии Python и размере.
Информация о системе
pythondocker info
Показывает:
- Количество установленных версий Python
- Количество созданных окружений
- Пути к директориям
- Доступность pyenv
Очистка окружений
# Просмотр того, что будет удалено (dry-run)
pythondocker clean --dry-run
# Удаление неиспользуемых окружений
pythondocker clean
Удаление версии Python
# Просмотр того, что будет удалено (dry-run)
pythondocker remove 2.7 --dry-run
# Удаление конкретной версии Python
pythondocker remove 2.7
Решение проблем
Python не скачивается
Если версия Python не скачивается:
- Проверьте подключение к интернету
- Убедитесь, что у вас достаточно места на диске
- Проверьте права доступа к директории
~/.pythondocker/ - Используйте флаг
--verboseдля подробного вывода
Версия Python не найдена
Если программа не может найти нужную версию Python:
- Программа автоматически попытается скачать её с python.org
- Если скачивание не удалось, проверьте доступность версии для вашей платформы
- Для некоторых старых версий может потребоваться ручная установка
- Используйте
pythondocker infoдля просмотра установленных версий
Скрипт не запускается
Если скрипт не запускается:
- Используйте флаг
--verboseдля подробного вывода - Проверьте, что скрипт существует и доступен для чтения
- Убедитесь, что версия Python указана правильно
- Проверьте синтаксис скрипта
Проблемы с кодировкой
Для работы с файлами в кодировке CP1251 (Windows):
pythondocker script.py --python 2.7 --encoding cp1251
Программа автоматически определит кодировку из комментария # -*- coding: ... -*- в начале файла.
Проблемы с зависимостями
Если зависимости не устанавливаются:
- Проверьте формат файла
requirements.txt - Убедитесь, что версия Python поддерживает нужные пакеты
- Используйте
--verboseдля просмотра ошибок установки - Попробуйте пересоздать окружение с
--force-recreate
Разработка
Установка в режиме разработки
git clone https://github.com/thenola/pythondocker.git
cd pythondocker
pip install -e .
Структура проекта
pythondocker/
├── pythondocker/
│ ├── __init__.py # Инициализация пакета
│ ├── cli.py # CLI интерфейс
│ ├── commands.py # Команды управления окружениями
│ ├── version_detector.py # Определение версии Python
│ ├── python_installer.py # Скачивание и установка версий Python
│ ├── environment_manager.py # Управление виртуальными окружениями
│ └── pyenv_manager.py # Интеграция с pyenv (опционально)
├── examples/ # Примеры скриптов
│ ├── python2_example.py
│ ├── python3_example.py
│ └── requirements_example.txt
├── tests/ # Тесты
│ ├── test_python2.py
│ ├── test_python3.py
│ ├── test_encoding_cp1251.py
│ └── ...
├── setup.py # Установочный файл
├── requirements.txt # Зависимости (пустой - используется только stdlib)
└── README.md # Документация
Запуск тестов
# Запуск всех тестов
python tests/run_all_tests.py
# Запуск конкретного теста
pythondocker tests/test_python2.py --python 2.7
Вклад в проект
Приветствуются pull requests и issues! Пожалуйста:
- Создайте форк репозитория
- Создайте ветку для новой функции (
git checkout -b feature/amazing-feature) - Закоммитьте изменения (
git commit -m 'Add amazing feature') - Запушьте в ветку (
git push origin feature/amazing-feature) - Откройте Pull Request
Лицензия
Этот проект распространяется под лицензией MIT. Подробности см. в файле LICENSE.
MIT License
Copyright (c) 2024 PythonDocker Contributors
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file python_docker_package-1.0.0.tar.gz.
File metadata
- Download URL: python_docker_package-1.0.0.tar.gz
- Upload date:
- Size: 31.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
12183be7ee92f500f337f668b488c112dda69e3ff76875e2f76104927006c34a
|
|
| MD5 |
5992fd64ea102297721af35853e77fb9
|
|
| BLAKE2b-256 |
a8759ba91ba1d687fba625f87ff1213bb431835c60fa600d54f546374d955f99
|
File details
Details for the file python_docker_package-1.0.0-py3-none-any.whl.
File metadata
- Download URL: python_docker_package-1.0.0-py3-none-any.whl
- Upload date:
- Size: 30.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ae73db829db0ee885fdd82c305ebbed05f1697b58aeef664d47acd9a0dceb332
|
|
| MD5 |
310f6992d9c3912a627dd37eefc68124
|
|
| BLAKE2b-256 |
d7c75e64e97b2e03d633b1aab1fea76fc1cee3fdca2d3482fcd195b1f85888e7
|