PyPI jest wolny. Jak mogę uruchomić własny serwer?

Kiedy nowy programista dołącza do zespołu, lub Jenkins uruchamia kompletną kompilację, muszę stworzyć świeżego virtualenv. Często stwierdzam, że zainstalowanie virtualenv z Pip i duża liczba (ponad 10) wymagań zajmuje bardzo dużo czasu, aby zainstalować wszystko z PyPI. Często kończy się to niepowodzeniem z:

Downloading/unpacking Django==1.4.5 (from -r requirements.pip (line 1))
Exception:
Traceback (most recent call last):
  File "/var/lib/jenkins/jobs/hermes-web/workspace/web/.venv/lib/python2.6/site-packages/pip-1.2.1-py2.6.egg/pip/basecommand.py", line 107, in main
    status = self.run(options, args)
  File "/var/lib/jenkins/jobs/hermes-web/workspace/web/.venv/lib/python2.6/site-packages/pip-1.2.1-py2.6.egg/pip/commands/install.py", line 256, in run
    requirement_set.prepare_files(finder, force_root_egg_info=self.bundle, bundle=self.bundle)
  File "/var/lib/jenkins/jobs/hermes-web/workspace/web/.venv/lib/python2.6/site-packages/pip-1.2.1-py2.6.egg/pip/req.py", line 1018, in prepare_files
    self.unpack_url(url, location, self.is_download)
  File "/var/lib/jenkins/jobs/hermes-web/workspace/web/.venv/lib/python2.6/site-packages/pip-1.2.1-py2.6.egg/pip/req.py", line 1142, in unpack_url
    retval = unpack_http_url(link, location, self.download_cache, self.download_dir)
  File "/var/lib/jenkins/jobs/hermes-web/workspace/web/.venv/lib/python2.6/site-packages/pip-1.2.1-py2.6.egg/pip/download.py", line 463, in unpack_http_url
    download_hash = _download_url(resp, link, temp_location)
  File "/var/lib/jenkins/jobs/hermes-web/workspace/web/.venv/lib/python2.6/site-packages/pip-1.2.1-py2.6.egg/pip/download.py", line 380, in _download_url
    chunk = resp.read(4096)
  File "/usr/lib64/python2.6/socket.py", line 353, in read
    data = self._sock.recv(left)
  File "/usr/lib64/python2.6/httplib.py", line 538, in read
    s = self.fp.read(amt)
  File "/usr/lib64/python2.6/socket.py", line 353, in read
    data = self._sock.recv(left)
timeout: timed out

Jestem świadomy Pipa--use-mirrors flagę, a czasami ludzie z mojego zespołu pracowali przy użyciu--index-url http://f.pypi.python.org/simple (lub inne lustro), dopóki nie będą miały lustra, które reaguje w odpowiednim czasie. Jesteśmy w Wielkiej Brytanii, ale w Niemczech istnieje lusterko PyPI i nie mamy problemów z pobieraniem danych z innych stron.

Więc szukam sposobów, aby odzwierciedlić PyPI wewnętrznie dla naszego zespołu.

Dostępne opcje to:

Uruchamianie mojej własnej instancji PyPI. Istnieje oficjalna implementacja PyPI:Sklep z serem jak również kilka wdrożeń innych firm, takich jak:djangopypi ipypiserver (patrz przypis)

Problem z tym podejściem polega na tym, że nie interesuje mnie pełna funkcjonalność PyPI z przesyłaniem plików, chcę tylko odzwierciedlić treść, którą dostarcza.

Uruchomienie lustra PyPI za pomocąpep381klient lubpypi-mirror.

Wygląda na to, że może zadziałać, ale wymaga mojego lustra, aby najpierw pobrać wszystko z PyPI. Skonfigurowałem instancję testową pep381client, ale szybkość pobierania waha się od 5 Kb / s do 200 Kb / s (bity, a nie bajty). Dopóki gdzieś nie ma kopii pełnego archiwum PyPI, zajmie mi kilka tygodni, aby uzyskać użyteczne lustro.

Korzystanie z okrągłego robota PyPI, takiego jakyopypi.

To teraz nie ma znaczeniahttp://pypi.python.org sam składa się zkilka odrębnych geograficznie serwerów.

Kopiowanie wokół wirtualizacji między programistami lub hostingfolder zależności bieżącego projektu.

Nie jest to skalowalne: mamy kilka różnych projektów Pythona, których zależności zmieniają się (powoli) w czasie. Jak tylko zmienią się zależności dowolnego projektu, ten centralny folder musi zostać zaktualizowany, aby dodać nowe zależności. Kopiowanie virtualenv jest gorsze niż kopiowanie pakietów, ponieważ wszystkie pakiety Pythona z modułami C muszą być skompilowane dla systemu docelowego. Nasz zespół ma zarówno użytkowników systemów Linux, jak i OS X.

(To wciąż wygląda jak najlepsza opcja złej grupy).

Używanie inteligentnego proxy buforującego PyPI:kolektyw.eggproxy

Wygląda na to, że byłoby to bardzo dobre rozwiązanie, aleostatnia wersja PyPI pochodzi z 2009 roku i omawia mod_python.

Co robią inne duże zespoły Pythona? Jakie jest najlepsze rozwiązanie, aby szybko zainstalować ten sam zestaw pakietów Pythona?

Przypisy:

Widziałem pytanieJak rzucić własnym PyPI?, ale to pytanie dotyczy hostowania prywatnego kodu.Wiki Pythonawymienia alternatywne implementacje PyPINiedawno odkryłemCrate.io ale nie wierzę, że to pomaga mi podczas używania Pip.Istnieje monitoring witrynyStan lustrzany PyPINiektóre pakiety na PyPI mają swoje pliki hostowane gdzie indziej więc nawet idealne lustro nie pomoże we wszystkich zależnościach

questionAnswers(5)

yourAnswerToTheQuestion