2013-08-05 9 views
24

Mamy kilka własnych pakietów Python i chcesz utworzyć lokalne repozytorium PyPI dla nich za pomocą prostego interfejsu jak https://pypi.python.org/simple/jak utworzyć lokalny własny indeks repozytorium pypi bez lustra?

repozytorium Chcę utworzyć dla lokalnych tylko bez lustra z powodu względów bezpieczeństwa, a zostanie ona poddana Apache kontrola

Wygląd komendy pypimirror wygląda tak, że musi zostać zainicjowany jeden raz, co wymaga zwierciadlania.

Jak mogę wygenerować prosty indeks PyPi na podstawie lokalnych pakietów python.

Jakieś inne proste skrypty do tego?

+1

możliwy duplikat [Konfigurowanie lokalnego serwera PyPi z niestandardowym zestawem pakietów] (http://stackoverflow.com/questions/14674873/setting-up-a-local-pypi-server-with-custom-set- paczek) –

+2

możliwy duplikat [Jak wykonać własne pypi?] (http://stackoverflow.com/questions/1235331/how-to-roll-my-own-pypi) – aquavitae

Odpowiedz

15

Ponieważ poprosiłeś odpowiedzieć tutaj:

Spójrz na pip2pi, to wydaje się być dokładnie to, czego szukasz.

+0

jest to najprostszy sposób obsługi mojego przypadku. –

+2

Wygląda na to, że 'pip2pi' jest przeznaczony dla publicznych pakietów, które są już w PyPI, czy to prawda? Sądziłem, że pierwotne pytanie dotyczyło stworzenia repozytorium pakietów opracowanych wewnętrznie. –

3

Jeśli mówisz o uruchomieniu simplepypi, będziesz mieć serwer do dodawania pakietów i dostarczania ich. Cytując dokumentację:

- Running this on the setup.py of your favorite package: 

    python setup.py sdist upload -r local 

Jeśli było użyć os.walk lub glob.glob na lokalnym katalogu site-packages można szybko filtrować setup.py w każdym z pakietów/katalogów i wywołać powyższe na nich.

Jeśli potrzebujesz tylko utworzyć katalog plików tar.gz z ich listą .html, możesz użyć glob.glob na najwyższym poziomie swojej strony - paczki pakietów - tar.gz po kolei i dodaj wynikową nazwę pliku do listy - możesz wtedy wygenerować plik index.html z tej listy.

Można użyć dowolnego z dużą liczbą template silników dla tego lub wygenerować to sam:

import glob 
filelist = glob.glob("*.tar.gz") 
tags = ['<A href="file:Where/%s">%s</A>' % (s,s) for s in tags] 
head = """<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> 
<HTML> 
<HEAD> 
<TITLE></TITLE> 
<META NAME="Generator" CONTENT="Python Script"> 
<META NAME="Keywords" CONTENT="Cheeseshop"> 
<META NAME="Description" CONTENT="List of local python packages"> 
</HEAD> 

<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#FF0000" VLINK="#800000" ALINK="#FF00FF" BACKGROUND="?"> 
""" 
tail = """</BODY></HTML>""" 
tags.insert(0,head) 
tags.append(tail) 
page = "\n".join(tags) 

Następnie zapisz lub służyć stronę.

+0

wymaga to jednego lokalnego serwera pypi, którego chcę uniknąć. –

5

Nie ma nic szczególnego w lustrze i można użyć mod_rewrite, aby samemu ustawić.

  1. Zrzuć pakiety w katalogu zmapowanym na adres URL. Tutaj używam przykładu /url/to/my/pypi/. Hierarchia folderów powinna być: /foo/bar/simple/[name of package]/[name of tarball]

  2. Dodaj do następującego .htaccess lub globalnej konfiguracji dla tego katalogu, w którym są pakiety. Ostatni blok wierszy jest spaść z powrotem do globalnego indeksu PyPI:

    Options +Indexes 
    
    RewriteEngine On 
    
    RewriteRule ^/robots.txt - [L] 
    RewriteRule ^/icons/.* - [L] 
    RewriteRule ^/index\..* - [L] 
    
    RewriteCond /foo/bar/simple/ !-f 
    RewriteCond /foo/bar/simple/ !-d 
    RewriteRule ^/(.*)/?$ http://pypi.python.org/ [R,L] 
    
  3. Aktualizacja ~/.pip/pip.conf pkt do nowego repozytorium:

    [global] 
    index-url = http://localhost/url/to/my/pypi/ 
    

    lub użyć opcji w linii poleceń -i http://localhost/url/to/my/pypi/.

+0

Zrobiłbyś tylko "Opcje + indeksy" część kroku 2 dla "tylko lokalnie" jako pytanie, o które prosiłeś. Ale przezroczyste przekierowanie do pypi na rzeczy, które nie są lokalne, również jest użyteczne. :) – dannysauer

18

Podobną potrzebę mieliśmy w mojej firmie. Zasadniczo jak możemy przesłać pakiety "zamkniętego źródła" do indeksu, a jednocześnie możemy je zainstalować tak, jakby były w PyPI?

Sponsorowaliśmy projekt o nazwie devpi, który działa jako pamięć podręczna PyPI (pakiety, do których uzyskujesz dostęp z PyPI będą buforowane na serwerze), a także wydajny i szybki serwer indeksów. Dokumentacja jest dostępna pod adresem http://doc.devpi.net/latest/.

Dalej na mapie drogowej jest dublowanie dla wdrożenia wielu geos. Kopnięcie opon na maszynie trwa około 5 minut (patrz przewodniki szybkiego startu). Ostatecznie devpi jest kompatybilny zarówno z pip i easy_install (np. Nie potrzebujesz klienta devpi zainstalowanego na twoim komputerze).

Mam nadzieję, że ta pomoc.

+1

Mała przesada dla mojej prostej sprawy, ale głosuję, ponieważ wygląda dość stabilnie i jest łatwa w użyciu. –

+2

devpi jest dokładnie tym, czego szukałem. Działa jak serwer pypi i możesz użyć domyślnej komendy 'pip' do zarządzania pakietami. Łatwy w instalacji i łatwy w użyciu. Do użycia w środowisku wirtualnym demon może być uruchamiany/zatrzymywany w hakach po (de) aktywacji. – bouke

Powiązane problemy