Упаковка проекта, который использует несколько версий Python - PullRequest
0 голосов
/ 26 августа 2018

Я пытаюсь упаковать проект, который в основном основан на Python 3, но использует некоторые подпроекты Python 2 (из-за некоторых конкретных зависимостей).Таким образом, способ, которым модули python 3 используют программы на python 2, заключается в их явном вызове с использованием Popen (потому что мы не можем просто импортировать их).

Я пытался использовать pipenv, но, похоже, я могу 't создать среду для python 2 и python 3. Я попытался создать скрипт на python, который просто создает колеса из всех проектов (используя обе версии), но это выглядит как хакерское и неправильное.

Так чтоВопрос в том, как лучше всего упаковать проект, который использует несколько версий Python?

1 Ответ

0 голосов
/ 26 августа 2018

Проблема не только в упаковке. Вы застряли, используя инструменты интерпретатора для каждой версии Python независимо, и поэтому вы будете перетасовывать два двоичных файла, а не один. Я уверен, что многие поставщики уже делают это - например, Dropbox запускает несколько процессов на основе Python, взаимодействующих друг с другом на компьютере в определенный момент времени между пользовательским интерфейсом и процессами синхронизации.

Вторая проблема заключается в обмене результатами между интерпретаторами, это одна из целей библиотеки execnet , но в основном она создает канал совместно используемой памяти вне локального пространства процессов и определяет общий протокол сериализации. между каждым процессом. Popen не очень надежен, если вызываемые вами команды не имеют детерминированных результатов, и вы хотите дополнительно манипулировать результатами после их возврата.

Этот подход IPC может быть расширен по сети на RPC или HTTP, если вы хотите разместить свои приложения на внешних серверах или, например, с помощью Docker, что является одной из причин популярности микросервисов - вы можете независимо развертывать и масштабировать различные "ограниченные контексты"

...