Python-pakker er byggesteinene av Python-applikasjoner. De inkapslerer litt sammenhengende funksjonalitet som kan importeres og brukes av mange applikasjoner og systemer. Men først må utviklere finne pakken og kunne installere den. Python tilbyr et gratis offentlig lager for pakker, som er de facto-standarden for deling av Python-pakker. Du kan også bruke private pakkelager for proprietære pakker.
I denne opplæringen lærer du hvordan du deler dine egne pakker med fellesskapet. Hvis du har proprietære pakker du trenger å dele bare innenfor din bedrift, lærer du hvordan du gjør det også.
For bakgrunn, se Hvordan bruke Python-pakker og Hvordan skrive dine egne Python-pakker.
PyPI står for Python Package Index. Det er et offentlig lager for å laste opp pakkene dine. Pip er klar over PyPI og kan installere og / eller oppgradere pakker fra PyPI. PyPI pleide å bli kalt "Cheese Shop" etter Monty Pythons berømte skisse. Hvis du hører folk refererer til "Osterbutikk" i en Python-emballasje, ikke vær redd. Det er bare PyPI.
Før du laster opp en pakke, må du ha en pakke. Jeg bruker conmanpakken jeg introduserte i artikkelen Hvordan skrive dine egne Python-pakker. Siden PyPI inneholder tusenvis av pakker, er det svært viktig å kunne beskrive pakken din riktig hvis du vil at folk skal finne den. PyPI støtter et imponerende sett med metadatakoder for å la folk finne den riktige pakken for jobben.
Setup.py-filen inneholder mye viktig informasjon som brukes til å installere pakken. Men det kan også inneholde metadata som brukes til å klassifisere pakken din på PyPI. Pakker er klassifisert ved hjelp av flere metadatakoder. Noen av dem er tekstlige, og noen av dem har en liste over mulige verdier. Den komplette listen er tilgjengelig på PyPIs liste klassifiseringsside.
La oss legge til noen klassifikatorer til setup.py
. Det er ikke nødvendig å øke versionsnummeret som det bare er metadata, og koden forblir den samme:
fra setuptools importoppsett, find_packages setup (navn = 'conman', version = "0.3", url = "https://github.com/the-gigi/conman", lisens = "MIT", forfatter = "Gigi Sayfan" , author_email = "[email protected]", description = "Administrer konfigurasjonsfiler", klassifiserer = ['Utviklingsstatus :: 3 - Alpha', 'Forventet publikum :: Utviklere', 'Emne :: Programvareutvikling :: Biblioteker, 'Lisens :: OSI Godkjent :: MIT Lisens', 'Programmeringsspråk :: Python :: 2', 'Programmeringsspråk :: Python :: 2,6', 'Programmeringsspråk :: Python :: 2,7',] pakker = find_packages (ekskluder = ['tester']), long_description = open ('README.md') les (), zip_safe = False, setup_requires = ['nose> = 1,0'], test_suite = "nose.collector" )
Du må opprette en konto på PyPI for å kunne laste opp pakker. Fyll ut dette skjemaet og bekreft identiteten din ved å klikke på nettadressen i bekreftelsesmeldingen. Nå må du opprette en .pypyrc
fil i din hjemmekatalog som inneholder informasjonen som trengs for å laste opp pakkene.
[distutils] index-servere = pypi [pypi] repository = https://pypi.python.org/pypi brukernavn = the_gigi
Du kan også legge til passordet ditt, men det er tryggere hvis du ikke gjør det hvis noen dårlige elementer får tak i den bærbare datamaskinen. Dette er spesielt viktig hvis du laster opp populære pakker fordi hvis noen kan laste opp eller oppgradere pakkene dine, vil alle personene som bruker disse pakkene være sårbare.
Hvis du vil teste pakkeregistreringen og opplastingsprosessen og ikke bekymre deg for å publisere noe ufullstendig, kan du jobbe med det alternative PyPI-teststedet. Utvid din ~ / .pypirc-fil for å inkludere en 'pypitest'-seksjon.
[distutils] index-servere = pypi pypitest [pypitest] repository = https://testpypi.python.org/pypi brukernavn = the_gigi [pypi] repository = https://pypi.python.org/pypi brukernavn = the_gigi
Husk at teststedet rengjøres regelmessig, så ikke stole på det. Det er kun beregnet til testformål.
Hvis dette er den første utgivelsen av pakken din, må du registrere den med PyPI. Twine har en registerkommando, men jeg kan ikke finne ut hvordan jeg bruker den. Etter dokumentasjonen produseres en feil, og kontroll av enhetstester for tvilling er det ingen test for registerkommandoen. Jaja. Du kan også gjøre det manuelt med dette skjemaet for å laste opp PKG-INFO-filen. Hvis du bruker Python 2.7.9+ eller Python 3.2+, kan du også trygt registrere deg ved hjelp av python setup.py-register
.
La oss registrere conman på PyPI test nettstedet. Legg merke til -r pypitest
, som er basert på seksjonen i ~ / .Pypirc
vil registrere seg på teststedet.
python setup.py register -r pypitest kjøreregister kjører egg_info skriving conman.egg-info / PKG-INFO skriver toppnivå navn til conman.egg-info / top_level.txt skriver dependency_links til conman.egg-info / dependency_links.txt lesing manifest fil 'conman.egg-info / SOURCES.txt' lesings manifestmal 'MANIFEST.in' skriv manifestfil 'conman.egg-info / SOURCES.txt' løpekontroll Passord: Registrering av conman til https: //testpypi.python. org / pypi Serverrespons (200): OK
Du kan laste opp en pakke med python setup.py opplasting
, men det er ikke sikkert som det pleide å sende brukernavn og passord over HTTP til Python 2.7.9 og Python 3.2. Twine bruker alltid HTTPS og har flere fordeler som å laste opp forhåndsdefinerte distribusjoner, og det støtter alle emballasjeformater, inkludert hjul. Jeg vil bruke tvilling for den faktiske opplasting.
Twine er ikke en del av standardbiblioteket, så du må installere det: pip installasjon twine
.
Endelig er det på tide å faktisk laste opp pakken.
> twine opplasting -r pypitest -p ******* dist / * Opplastingsfordeler til https://testpypi.python.org/pypi Opplasting conman-0.3-py2-none-any.whl Laster opp conman-0.3-py2 .py3-none-any.whl Laster opp conman-0.3.tar.gz
Twine lastet opp alle distribusjonsformatene, både kilden og hjulene.
Når pakken din er på PyPI, bør du sørge for at du kan installere den og alt fungerer. Her lager jeg et engangs virtuelt miljø, pip installasjonsmanual fra PyPI-testen, og importerer den deretter. Du vil kanskje kjøre mer grundige tester for pakken din.
> mkvirtualenv test_conman_pypi Ny python kjørbar i test_conman_pypi / bin / python2.7 Opprett også kjørbar i test_conman_pypi / bin / python Installere setuptools, pip ... ferdig. Bruk: Kilde deaktivere fjerner "bin" -katalogen for miljøet aktivert med 'kildeaktivert' fra PATH. (test_conman_pypi)> pip installasjon -i https://testpypi.python.org/pypi conman Nedlasting / utpakking conman Nedlasting conman-0.3-py2-none-any.whl Lagring av nedlastning i cache på /Users/gigi/.cache/pip /https%3A%2F%2Ftestpypi.python.org%2Fpackages%2Fpy2%2Fc%2Fconman%2Fconman-0.3-py2-none-any.whl Installere innsamlede pakker: conman Installert komplett samlestasjon Opprydding ... (test_conman_pypi)> python Python 2.7 .10 (standard, 10. juni 2015, 19:43:32) [GCC 4.2.1 Kompatibel Apple LLVM 6.0 (clang-600.0.57)] på Darwin Type "hjelp", "copyright", "credits" eller "lisens" for mer informasjon. >>> import conman >>>
Merk at hjulfordelingen ble installert som standard.
Når du utvikler pakkene dine og laster opp nye versjoner, er det viktig å følge et fornuftig versionsprogram. Folk vil bli ganske opprørt hvis en utilsiktet oppgradering bryter sin kode. Versjonsprogrammet ditt må overholde PEP-440 - Versjonsidentifikasjon og avhengighetsspesifikasjon.
Denne spesifikasjonen tillater flere ordninger å velge mellom. Jeg anbefaler å bruke den populære semantiske versjonsprogrammet. Det er ganske mye "
PyPI er flott, men noen ganger vil du ikke dele pakkene dine. Mange bedrifter og organisasjoner har ingeniørgrupper som bruker Python og trenger å dele pakker mellom dem, men har ikke lov til å dele dem offentlig på PyPI. Dette er ikke et problem. Du kan dele pakker på private pakkeregister under din kontroll.
Vær oppmerksom på at du kanskje vil ha et privat pakkelager under din kontroll bare for å håndtere tredjepartsavhengighetene. For eksempel kan en pakkeforfatter bestemme å slette en pakke fra PyPI. Hvis systemet ditt er avhengig av å kunne installere denne pakken fra PyPI, har du problemer.
Devpi (som står for Development Package Index) er en drop-in erstatning for den offentlige PyPI-serveren. Det er åpen kildekode og MIT lisensiert, slik at du kan kjøre den inne i brannmuren. Devpi er veldig kraftig og har mange funksjoner som gjør det mulig å fungere som din ultimate pakkeserver:
Devpi har utmerket dokumentasjon, et pluginsystem og er i aktiv utvikling med et levende samfunn.
Python tilbyr en komplett løsning for hosting dine pakker og gjør dem tilgjengelige for andre pythonistene. Det er en strømlinjeformet prosess assistert av verktøy for å pakke og laste opp pakker og gjøre dem enkle å finne og installere.
Hvis du trenger å holde ting privat, er Devpi her for deg som et modent og robust privatpakkearkiv.