Python-paket är byggstenarna i Python-applikationer. De inkapslar en del sammanhängande funktionalitet som kan importeras och användas av många applikationer och system. Men först måste utvecklare hitta ditt paket och kunna installera det. Python tillhandahåller ett gratis offentligt arkiv för paket, vilket är de facto-standarden för delning av Python-paket. Du kan också använda privata paketförråd för egna paket.
I den här handledningen lär du dig hur du delar dina egna paket med samhället. Om du har egna paket måste du dela med dig inom ditt företag, så lär du dig att göra det också.
För bakgrund, se Så här använder du Python-paket och hur du skriver dina egna Python-paket.
PyPI står för Python Package Index. Det är ett offentligt förråd för att ladda upp dina paket. Pip är medveten om PyPI och kan installera och / eller uppgradera paket från PyPI. PyPI brukade kallas "Ostaffären" efter Monty Pythons berömda skiss. Om du hör folk hänvisar till "Ostaffären" i ett Python-förpackningskontext, var inte orolig. Det är bara PyPI.
Innan du lägger upp ett paket måste du ha ett paket. Jag använder conmanpaketet som jag introducerade i artikeln Hur man skriver egna Python-paket. Eftersom PyPI innehåller tusentals paket är det mycket viktigt att kunna beskriva ditt paket korrekt om du vill att folk ska hitta den. PyPI stöder en imponerande uppsättning metadataggar för att låta personer hitta rätt paket för jobbet.
Setup.py-filen innehåller mycket viktig information som används för att installera ditt paket. Men det kan också innehålla metadata som används för att klassificera ditt paket på PyPI. Paket klassificeras med flera metadatakoder. Vissa av dem är textliga och några av dem har en lista över möjliga värden. Den fullständiga listan är tillgänglig på PyPIs lista klassificeringar sida.
Låt oss lägga till några klassificatorer till setup.py
. Det finns ingen anledning att öka versionsnumret eftersom det bara är metadata och koden förblir densamma:
från setuptools import setup, hitta_packages setup (namn = 'conman', version = "0.3", url = "https://github.com/the-gigi/conman", licens = "MIT", författare = "Gigi Sayfan" , author_email = "[email protected]", description = "Hantera konfigurationsfiler", classifiers = ['Utvecklingsstatus :: 3 - Alpha', 'Intended audience :: Developers', 'Topic :: Software Development :: Biblioteken "," Licens :: OSI Godkänd: MIT-licens "," Programmeringsspråk :: Python :: 2 "," Programmeringsspråk :: Python :: 2,6 "," Programmeringsspråk :: Python :: 2,7 ' paketet = find_packages (exclude = ['tests']), long_description = open ('README.md'). läs (), zip_safe = False, setup_requires = ['nose> = 1,0'], test_suite = "nose.collector" )
Du måste skapa ett konto på PyPI för att kunna ladda upp paket. Fyll i detta formulär och verifiera din identitet genom att klicka på webbadressen i verifieringsmeddelandet. Nu måste du skapa en .pypyrc
filen i din hemkatalog som innehåller de uppgifter som behövs för att ladda upp paket.
[distutils] index-servrar = pypi [pypi] repository = https://pypi.python.org/pypi användarnamn = the_gigi
Du kan också lägga till ditt lösenord, men det är säkrare om du inte gör det om något dåligt element får tag på din bärbara dator. Detta är särskilt viktigt om du laddar upp populära paket eftersom om någon kan ladda upp eller uppgradera dina paket, kommer alla personer som använder dessa paket att vara sårbara.
Om du vill testa paketregistreringen och uppladdningsprocessen och inte oroa dig för att publicera något ofullständigt kan du arbeta med det alternativa PyPI-teststället. Utvid din ~ / .pypirc-fil för att inkludera en "pypitest" -avsnitt.
[distutils] index-servrar = pypi pypitest [pypitest] repository = https://testpypi.python.org/pypi användarnamn = the_gigi [pypi] repository = https://pypi.python.org/pypi användarnamn = the_gigi
Kom ihåg att testplatsen städas regelbundet, så lita inte på det. Den är endast avsedd för teständamål.
Om det här är första utgåvan av ditt paket måste du registrera det med PyPI. Twine har ett registerkommando, men jag kan inte räkna ut hur man använder den. Efter dokumentationen skapas ett fel, och kontroll av enhetstesterna för garn finns inget test för registerkommandot. Jaja. Du kan också göra det manuellt med denna blankett för att ladda upp PKG-INFO-filen. Om du använder Python 2.7.9+ eller Python 3.2+ kan du också registrera dig säkert med python setup.py register
.
Låt oss registrera conman på PyPI testplatsen. Notera -r pypitest
, som bygger på avsnittet i ~ / .Pypirc
kommer att registrera sig på testplatsen.
python setup.py register -r pypitest löpregister körning egg_info skriva conman.egg-info / PKG-INFO skriva högsta namn till conman.egg-info / top_level.txt skriver dependency_links till conman.egg-info / dependency_links.txt läsning manifestfilen 'conman.egg-info / SOURCES.txt' läs manifestmall 'MANIFEST.in' skriv manifestfilen 'conman.egg-info / SOURCES.txt' körkontroll Lösenord: Registrering av conman till https: //testpypi.python. org / pypi Serverrespons (200): OK
Du kan ladda upp ett paket med python setup.py ladda upp
, men det är inte säkert eftersom det brukade skicka ditt användarnamn och lösenord över HTTP till Python 2.7.9 och Python 3.2. Twine använder alltid HTTPS och har ytterligare fördelar som att ladda upp för skapade distributioner, och det stöder alla förpackningsformat, inklusive hjul. Jag kommer använda twine för den aktuella uppladdningen.
Twine är inte en del av standardbiblioteket, så du behöver installera det: pip installera garn
.
Slutligen är det dags att faktiskt ladda upp paketet.
> twine upload -r pypitest -p ******* dist / * Överföringsfördelningar till https://testpypi.python.org/pypi Uppladdning conman-0.3-py2-none-any.whl Uppladdning conman-0.3-py2 .py3-none-any.whl Uppladdning conman-0.3.tar.gz
Twine laddade upp alla distributionsformat, både källa och hjul.
När ditt paket är på PyPI, bör du se till att du kan installera det och allt fungerar. Här skapar jag en enstaka virtuell miljö, pipinstallationskonman från PyPI-testplatsen och importerar sedan den. Du kanske vill köra mer grundliga tester för ditt paket.
> mkvirtualenv test_conman_pypi Ny python körbar i test_conman_pypi / bin / python2.7 Skapa också körbar i test_conman_pypi / bin / python Installera setuptools, pip ... done. Användning: Källa avaktivera tar bort "bin" -katalogen för miljön aktiverad med "källa aktiverad" från PATH. (test_conman_pypi)> pipinstallation -i https://testpypi.python.org/pypi conman Nedladdning / packning conman Nedladdning conman-0.3-py2-none-any.whl Lagring av nedladdning i cache på /Users/gigi/.cache/pip /https%3A%2F%2Ftestpypi.python.org%2Fpackages%2Fpy2%2Fc%2Fconman%2Fconman-0.3-py2-none-any.whl Installera samlade paket: conman Installerat framgångsrikt conman Rengöring ... (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 Typ "hjälp", "upphovsrätt", "krediter" eller "licens" för mer information. >>> import conman >>>
Observera att hjulfördelningen installerades som standard.
När du utvecklar dina paket och laddar upp nya versioner är det viktigt att följa ett förnuftigt versionsprogram. Människor blir ganska upprörd om en oavsiktlig uppgradering bryter mot deras kod. Ditt versionsprogram måste överensstämma med PEP-440 - Versionsidentifikation och beroendespecifikation.
Denna specifikation tillåter flera system att välja mellan. Jag rekommenderar att du använder det populära Semantic Versioning-systemet. Det är ganska mycket "
PyPI är bra, men ibland vill du inte dela dina paket. Många företag och organisationer har ingenjörsgrupper som använder Python och behöver dela paket mellan dem, men får inte dela dem offentligt på PyPI. Det här är inget problem. Du kan dela paket på privata paketförråd under din kontroll.
Observera att ibland kanske du vill ha ett privat paketförråd under din kontroll bara för att hantera dina tredjepartsberoende. Till exempel kan en paketförfattare besluta att radera ett paket från PyPI. Om ditt system är beroende av att kunna installera det här paketet från PyPI, har du problem.
Devpi (som står för Development Package Index) är ett inlösenbyte för den offentliga PyPI-servern. Det är öppen källkod och MIT licensierad, så du kan köra den i din brandvägg. Devpi är mycket kraftfull och har många funktioner som gör det möjligt att fungera som din ultimata förpackningsserver:
Devpi har utmärkt dokumentation, ett pluginsystem och är aktivt utvecklad med en levande community.
Python tillhandahåller en komplett lösning för att ta emot dina paket och göra dem tillgängliga för dina andra pythonister. Det finns en strömlinjeformad process som stöds av verktyg för att paketera och ladda upp paket och göra dem lätta att hitta och installera.
Om du behöver hålla saker privata, är Devpi här för dig som ett moget och robust privat paketförråd.