Skip to main content

Tool for running legacy Python scripts in isolated virtual environments

Project description

PythonDocker

License: MIT Python Version

PythonDocker — инструмент для запуска старых Python скриптов (включая Python 2.x) в изолированных виртуальных окружениях с автоматическим определением версии Python. Работает без Docker, используя только стандартную библиотеку 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

  1. Определение версии Python:

    • Проверка shebang строки (#!/usr/bin/env python2.7)
    • Поиск комментариев с указанием версии (# Requires Python 2.7)
    • Анализ синтаксиса (поиск признаков Python 2: print без скобок, xrange(), raw_input() и др.)
  2. Подготовка окружения:

    • Проверка наличия нужной версии Python локально
    • Скачивание версии с python.org (если отсутствует)
    • Создание изолированного виртуального окружения
    • Установка зависимостей из requirements.txt (если указан)
  3. Запуск скрипта:

    • Запуск скрипта в изолированном виртуальном окружении
    • Использование правильной версии Python
    • Передача аргументов и переменных окружения
    • Настройка кодировки для ввода/вывода
  4. Хранение данных:

    • Версии Python хранятся в ~/.pythondocker/python/
    • Виртуальные окружения создаются в ~/.pythondocker/envs/
    • Окружения переиспользуются между запусками

Определение версии Python

PythonDocker определяет версию Python следующими способами (в порядке приоритета):

  1. Shebang строка: #!/usr/bin/env python2.7

  2. Комментарии: # Requires Python 2.7, # Python version: 2.7

  3. Анализ синтаксиса: поиск признаков Python 2:

    • print без скобок
    • xrange() вместо range()
    • dict.iteritems(), dict.iterkeys(), dict.itervalues()
    • raw_input() вместо input()
    • unicode() функция
    • basestring тип
    • и другие характерные конструкции
  4. По умолчанию: если версия не определена, используется 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 не скачивается:

  1. Проверьте подключение к интернету
  2. Убедитесь, что у вас достаточно места на диске
  3. Проверьте права доступа к директории ~/.pythondocker/
  4. Используйте флаг --verbose для подробного вывода

Версия Python не найдена

Если программа не может найти нужную версию Python:

  1. Программа автоматически попытается скачать её с python.org
  2. Если скачивание не удалось, проверьте доступность версии для вашей платформы
  3. Для некоторых старых версий может потребоваться ручная установка
  4. Используйте pythondocker info для просмотра установленных версий

Скрипт не запускается

Если скрипт не запускается:

  1. Используйте флаг --verbose для подробного вывода
  2. Проверьте, что скрипт существует и доступен для чтения
  3. Убедитесь, что версия Python указана правильно
  4. Проверьте синтаксис скрипта

Проблемы с кодировкой

Для работы с файлами в кодировке CP1251 (Windows):

pythondocker script.py --python 2.7 --encoding cp1251

Программа автоматически определит кодировку из комментария # -*- coding: ... -*- в начале файла.

Проблемы с зависимостями

Если зависимости не устанавливаются:

  1. Проверьте формат файла requirements.txt
  2. Убедитесь, что версия Python поддерживает нужные пакеты
  3. Используйте --verbose для просмотра ошибок установки
  4. Попробуйте пересоздать окружение с --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! Пожалуйста:

  1. Создайте форк репозитория
  2. Создайте ветку для новой функции (git checkout -b feature/amazing-feature)
  3. Закоммитьте изменения (git commit -m 'Add amazing feature')
  4. Запушьте в ветку (git push origin feature/amazing-feature)
  5. Откройте 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

python_docker_package-1.0.0.tar.gz (31.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

python_docker_package-1.0.0-py3-none-any.whl (30.0 kB view details)

Uploaded Python 3

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

Hashes for python_docker_package-1.0.0.tar.gz
Algorithm Hash digest
SHA256 12183be7ee92f500f337f668b488c112dda69e3ff76875e2f76104927006c34a
MD5 5992fd64ea102297721af35853e77fb9
BLAKE2b-256 a8759ba91ba1d687fba625f87ff1213bb431835c60fa600d54f546374d955f99

See more details on using hashes here.

File details

Details for the file python_docker_package-1.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for python_docker_package-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ae73db829db0ee885fdd82c305ebbed05f1697b58aeef664d47acd9a0dceb332
MD5 310f6992d9c3912a627dd37eefc68124
BLAKE2b-256 d7c75e64e97b2e03d633b1aab1fea76fc1cee3fdca2d3482fcd195b1f85888e7

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page