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