2009-10-05 17 views
16

Załóżmy, że jesteś w zespole, który utrzymuje wiele wewnętrznych bibliotek Pythona (jaja) iz jakiegokolwiek powodu przesłanie ich do Pypi nie jest opcją. Jak możesz obsługiwać biblioteki (jaja), aby easy_install nadal działało dla członków twojego zespołu?Jak obsługiwać własne repozytorium jaj?

Zasadniczo byłoby super, gdyby to działało ....

(someproj)[email protected]:~$ easy_install myproprietary.lib-dev 
user: uberdev 
password:... 
fetching...... 
Searching for myproprietary.lib-dev 
Reading http://dev.mycompany.corp/myproprietary.lib-dev 
Reading http://dev.mycompany.corp 
Reading http://dev.mycompany.corp/dist 
Best match: myproprietary.lib-dev 
Downloading http://dev.mycompany.corp/dist/myproprietary.lib-dev 

Przypuszczam, że jakiś rodzaj serwerów, które obecnie nie mogą być zainstalowane, ale będę wdzięczny za wskazówki od ekspertów w tej sprawie.

Dzięki

+3

Dostajesz karton i wkładasz je do lodówki! * Rim-shot * –

Odpowiedz

8

wdrażać wszystkie jajka do katalogu wszystkich deweloperów. może osiągnąć (na przykład na serwerze internetowym).

Aby zainstalować jaja z tego katalogu, typu:

$ easy_install -H None -f http://server/vdir TheEggToInstall 

lub.

$ easy_install -H None -f /path/to/directory TheEggToInstall 

-H None środki nie pozwalają jajko pobrania z dowolnego hosta (z wyjątkiem jednego wymienionego w -f).

Katalog może być osiągalny przez http lub może być katalogiem, który zamontujesz (NFS, Windows akcji itp.). Być może nawet FTP działa?

easy_install documentation zawiera informacje na ten temat.

+0

Fajne dzięki bardzo. Na stronie widzę, że możesz także skonfigurować preferowane adresy URL w pliku konfiguracyjnym. I easy_install obsłuży podstawowy http auth, który prawie całkowicie odpowie na to pytanie. –

+0

@codeape, mam pliki z jajami hostowane na mojej prywatnej stronie internetowej, np. https://test.xxx.com/versions/ kiedy to robię easy_install -H Brak -f https://test.xxx.com/version/ netforce_account-3.1.0-py3.5.egg, otrzymuję bardzo niechciane wyniki, takie jak omijanie hosta test.xx i (niedozwolony host, szczegóły: http://bit.ly/1dg9ijs). , czego mi brakuje? –

+0

Czy możesz opublikować wyjście konsoli? – codeape

3

Jeśli zespół jest rozprowadzany - i na warunkach mówiąc - wtedy proste repozytorium źródła jest lepszy niż jakiś inny rodzaj serwera.

Po prostu twórz projekty i przechowuj bagażnik. Gdy sytuacja się zmieni, powiedz im, aby zaktualizowali.

Jeśli twoja drużyna jest ulokowana w jednym miejscu - i na warunkach mówienia - to współdzielona stacja z "oficjalnymi" bibliotekami również działa dobrze. Wystarczy go zamontować i dołączyć do swojego urządzenia PYTHONPATH.

Jeśli chcesz zlokalizowane kopie, podaj oficjalne źródło w subwersji (lub udostępnionym dysku) z dobrym plikiem setup.py. Oni po prostu CD do katalogu i uruchomić python setup.py install i wszystko inne dzieje się dla nich. Jest to frakcja łatwiejsza niż easy_install, ponieważ setup.py jest już częścią dystrybucji Pythona.

Jaja są przeznaczone dla osób, które nie znają terminów.

Twoi członkowie zespołu zwykle mówią po angielsku i nie potrzebują dodatkowej złożoności jaj. Podstawowy setup.py powinien wystarczyć.

+0

Podnosisz kilka dobrych punktów. Pomyślałem, że używanie kontroli wersji jako mechanizmu udostępniania zadziała, jeśli będzie jedno repozytorium, ale jeśli jest wiele repozytoriów, powiedzmy jeden na jajko, to posiadanie różnych wersji jajek dla członków zespołu może mieć więcej sensu jako repozytorium jaj stałoby się centralnym miejscem. Bardziej ogólnie chciałem zrozumieć mechanizmy stojące za tym, jak easy_install znajduje jaja, które na podstawie odpowiedzi wydają się stosunkowo proste. –

1

Po pierwsze: jeśli pakiety są pakietami ogólnymi, powinny być dostępne publicznie, nie wysyłanie pakietów do PyPI jest generalnie złym pomysłem, ponieważ łatwe instalowanie pakietu zależnego od pakietu oznacza, że ​​serwer jajeczny musi być uruchomiony , a także PyPI. Dla każdego zaangażowanego serwera uzyskujesz więcej pojedynczych punktów awarii.

Ale jeśli są to prywatne pakiety, których nie powinno się nawet umieszczać na liście PyPI, lub pakiety przydatne tylko jako część dużego systemu, takiego jak Plone, to inna sprawa. Następnie chcesz easy___install i buildout etc, aby wyszukać jajka na serwerze. Jest to dość proste. Wystarczy, że umieścisz katalog jaja na serwerze WWW i wskażesz katalog z parametrem -f do easy_install.

Oto przykład takiego repozytorium: http://dist.plone.org/release/3.3.1/

+1

Zgadzam się z tobą w zasadzie. Jednak niektóre firmy mają spore wątpliwości na temat swojej "własności intelektualnej". Ponadto, w każdym razie, przesyłanie do pypi wydaje się sugerować, że jestem skłonny go wspierać i przyjmować żądania dotyczące błędów/funkcji. co nie zawsze tak jest. A przynajmniej moment, w którym musi być udostępniony zespołowi, a czas, w którym musi być udostępniony światu, może być różny. –

2

używam ClueReleaseManager

ClueReleaseManager jest implementacją serwera backend PyPI jako dostarczonych przez http://pypi.python.org. Używa SQLAlchemy (domyślnie na domenie ) do przechowywania wszystkich metadanych projektu i systemu plików do przechowywania plików projektu.