Добавление общих пакетов Python к нескольким virtualenvs

Текущий рабочий процесс Python

У меня есть pip , distribute , virtualenv и ] virtualenvwrapper установлен в мои пакеты сайтов Python 2.7 ( фреймворк Python, установленный в Mac OS X ). В моем ~ / .bash_profile у меня есть строка

export PIP_DOWNLOAD_CACHE=$HOME/.pip_download_cache

Это дает следующий рабочий процесс:

$ mkvirtualenv pip-test
$ pip install nose        # downloaded and installed from PyPi
$ pip install mock        # downloaded and installed from PyPi
$ mkvirtualenv pip-test2
$ pip install nose        # installed from pip's download cache
$ pip install mock        # installed from pip's download cache

Вопросы

Поскольку я не загружаю пакеты, которые были ранее установлены в другом virtualenv, это рабочий процесс экономит время и пропускную способность. Однако это не так. t сэкономить место на диске, поскольку каждый пакет будет установлен в каждый файл virtualenv. Поэтому мне интересно:

  • Вопрос №1 Есть ли модификация этого рабочего процесса, которая позволила бы мне сэкономить дисковое пространство за счет того, что несколько virtualenvs ссылаются на один пакет Python, который не установлен в мои пакеты сайта Python 2.7?

Я пробовал использовать add2virtualenv , который является частью virtualenvwrapper. Хотя это «добавляет указанные каталоги к пути Python для активного в настоящий момент virtualenv», оно не добавляет никаких исполняемых файлов, найденных в каталоге virtualenv / bin . Следовательно, следующее не удастся: повторная разработка серверной системы на Scala + Akka для игры, которая будет обслуживать клиентов на Android, iPhone и Second Life. Некоторые части этого сервера должны быть высокодоступными, работать на ...

Мы разрабатываем серверную систему на Scala + Akka для игры, которая будет обслуживать клиентов на Android, iPhone и Second Life. Некоторые части этого сервера должны быть высокодоступными и работать на нескольких машинах. Если один из этих серверов выходит из строя (например, из-за аппаратного сбоя), система должна продолжать работать. Я думаю, что хочу, чтобы у клиентов был список машин, к которым они будут пытаться подключиться, подобно тому, как работает Cassandra.

Многоузловые примеры, которые я видел до сих пор с Akka, кажутся мне сосредоточенными вокруг идеи масштабируемости, а не высокой доступности (по крайней мере, в отношении оборудования). В примерах с несколькими узлами всегда есть единственная точка отказа. Например, есть балансировщики нагрузки, но если мне нужно перезагрузить одну из машин, на которых есть балансировщики нагрузки, моя система пострадает от простоя.

Есть ли какие-нибудь примеры, демонстрирующие такой тип отказоустойчивости оборудования для Akka? Или у вас есть какие-нибудь мысли о хороших способах сделать это?

На данный момент лучший ответ, который я смог придумать, - это изучить документы Erlang OTP, поразмышлять над ними и попытаться выяснить как собрать мою систему, используя строительные блоки, доступные в Akka.

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

26
задан Unoti 11 September 2010 в 21:17
поделиться