Как развернуть приложения Python внутри корпоративной сети

Сначала позвольте мне объяснить текущую ситуацию:

У нас есть несколько python приложений, которые зависят от пользовательских (не общедоступных) пакетов, а также от общеизвестных пакетов. Все эти зависимости установлены при установке system python. Распространение приложения осуществляется через git по источнику. Все эти компьютеры скрыты внутри корпоративной сети и не имеют доступа в Интернет.

Этот подход немного затруднителен, поскольку он имеет следующие недостатки:

  • Библиотеки должны быть установлены вручную на каждом компьютере :(

Как лучше развернуть приложение? Недавно я видел virtualenv, который кажется решением, но я его пока не вижу.

virtualenv создает чистый python instance для моего приложения. Как именно я должен развернуть это, чтобы пользователи программного обеспечения могли легко его запустить?

Должен ли быть сценарий запуска внутри приложения, который создает virtualenv во время запуска?

Следующая проблема заключается в том, что компьютеры не имеют доступа в Интернет. Я знаю, что могу указать собственное местоположение для пакетов (сетевой ресурс?), но правильный ли это подход? Или я должен также развернуть заархивированные пакеты?

Будет ли другим подходом отправлять весь экземпляр Python? Таким образом, пользователю не нужно запускать virutalenv? В этом экземпляре Python все необходимые пакеты будут предварительно установлены.

Поскольку наши приложения быстро растут, у нас короткий цикл выпуска (2 недели). Развернуть через git было очень просто. Пользователи могут получить последний релиз из ветки stable с помощью сценария обновления — возможно ли это, или есть лучшие подходы?

Я знаю, что вопросов много. Надеюсь, кто-нибудь ответит мне или даст мне несколько советов.


person Razer    schedule 22.07.2013    source источник
comment
Это две независимые проблемы, не так ли? (A) Как клиент (или центральный сервер) определяет, когда следует обновить одно или несколько приложений? (B) Как упаковать и доставить приложение. Для (A), возможно, вы могли бы перефразировать, чтобы прояснить, как выглядит ваша модель клиент/сервер или автор/пользователь. И что вы имеете в виду под отсутствием доступа к интернету? Это относится к вопросу? Если сервер обновлений и все клиентские компьютеры находятся в сети, они имеют всю необходимую видимость, не так ли?   -  person cfi    schedule 22.07.2013


Ответы (1)


Вы можете использовать pip для установки непосредственно из git:

pip install -e git+http://192.168.1.1/git/packagename#egg=packagename

Это применимо независимо от того, используете ли вы virtualenv (что вы должны) или нет.

Вы также можете создать файл requirements.txt, содержащий все, что вы хотите установить:

-e git+http://192.168.1.1/git/packagename#egg=packagename
-e git+http://192.168.1.1/git/packagename2#egg=packagename2

И тогда вы просто делаете это:

pip install -r requirements.txt

Таким образом, процедура развертывания будет заключаться в получении файла requirements.txt и последующем выполнении вышеуказанной команды. Добавление virtualenv сделало бы его чище, а не проще; без virtualenv вы загрязните общесистемную установку Python. virtualenv предназначен для предоставления решения для запуска многих приложений, каждое из которых находится в отдельной виртуальной среде Python; это не имеет большого отношения к тому, как на самом деле устанавливать вещи в этой среде.

person Antonis Christofides    schedule 22.07.2013
comment
Хорошая информация. Кое-что узнал здесь. Это еще не отвечает на часть вопроса, как восстановить отсутствующее интернет-соединение. Может быть, вопрос должен быть разработан, чтобы понять все потребности спрашивающего? - person cfi; 22.07.2013
comment
@cfi: ОП сказал, что они во внутренней сети. Вот почему пример получения данных из репозитория git по адресу 192.168.1.1. - person Antonis Christofides; 23.07.2013