Python-pakker lar deg bryte ned store systemer og organisere modulene deres på en konsistent måte som du og andre mennesker kan bruke og gjenbruke effektivt. Python motto av "Batterier Inkludert" betyr at det kommer forhåndslastet med mange nyttige pakker i standardbiblioteket.
Men det er også mange fantastiske tredjepartspakker du kan dra nytte av. I denne opplæringen lærer du alt du trenger å vite om hvilke pakker som er nøyaktig, hvordan du importerer moduler fra pakker, utforsker den innebygde pakken i Pythons standardbibliotek og installerer tredjepartspakker.
Før vi kan snakke om pakker, la oss snakke om moduler. Moduler er kildefilene med * .py-utvidelsen der du (og alle andre) legger funksjonene og klassene som omfatter programmet. Pakker er manifestasjonen av Pythons hierarkiske navneromskonsept. Å sitere fra Zen of Python:
"Navnegrupper er en hakkende god ide - la oss gjøre flere av dem!"
For å se hele Zen of Python, skriv inn importer dette
i en Python-interaksjon:
importere dette Zen of Python, av Tim Peters Beautiful er bedre enn stygg. Eksplisitt er bedre enn implisitt. Enkel er bedre enn kompleks. Komplekset er bedre enn komplisert. Flat er bedre enn nestet. Sparsom er bedre enn tett. Lesbarhet teller. Spesielle tilfeller er ikke spesielle nok til å bryte reglene. Selv om funksjonalitet slår renhet. Feil bør aldri passere stille. Med mindre det er tydelig tyst. I motsetning til tvetydighet, nekter fristelsen til å gjette. Det bør være en - og helst bare en - åpenbar måte å gjøre det på. Selv om den måten kanskje ikke er åpenbar i begynnelsen, med mindre du er nederlandsk. Nå er det bedre enn aldri. Selv om det aldri er ofte bedre enn * høyre * nå. Hvis implementeringen er vanskelig å forklare, er det en dårlig ide. Hvis implementeringen er lett å forklare, kan det være en god ide. Navnegrupper er en god ide, la oss gjøre flere av dem!
Navnegrupper hjelper med å organisere kode og hindre navngivningskonflikter. Dette er kritisk når flere personer jobber sammen, eller når de bruker pakker utviklet av andre mennesker.
Mens pakker representerer et hierarki av delpakker og moduler, som er filer, trenger ikke hierarkiet filsystembasert hvor pakker og underpakker er kataloger og underkataloger. Det er mye mer fleksibelt enn det.
La oss ta en titt på en pakke kalt "ansible". Det er ikke en pakke fra standardbiblioteket. Du vil se senere hvordan du finner og installerer tredjepartspakker. Nå, la oss bare sjekke katalogfilstrukturen.
Pakken vil bli installert vanligvis i Python-tolkens nettstedspakket katalog, som vil være plassert et sted (avhengig av versjon, OS og distribusjon) under "lib". På Mac, for Python 2.7 vil den bli plassert i "
tree ansible -L 1 ansible ├── __init__.py ├── cli ├── kompatibel ├── config ├── constants.py ├── feil ├── eksekutor ├── galakse ├─ ─ inventar ├── module_utils ├── moduler ├─ - parsing ├── playbook ├─ - plugins ├── mal ├── utils └─ - vars 15 kataloger, 2 filer
Det er to moduler og 15 kataloger. Hver katalog er en delpakke av hovedansvarlig pakke. Ser inne i ansible / utils-katalogen, kan vi se det inneholder flere moduler og enda en del delpakke:
tree ansible / utils-L 1 ansible / utils ├── __init__.py ├── boolean.py ├── cmd_functions.py ├── color.py ├── debug.py ├── display.py ├── kryptere .py ├── hashing.py ├── listify.py ├── module_docs.py ├── module_docs_fragments ├── path.py ▸ - shlex.py ├── unicode.py └─ - vars.py 1 katalog , 14 filer
Når du importerer en modul, går Python gjennom en søkealgoritme basert på søkebanen, som er en liste over kataloger for å starte søket. Søkebanen er en liste over kataloger tilgjengelig gjennom sys.path
, og du kan manipulere det dynamisk (legg til, fjern eller flytt elementer i søkebanen). Nettstedspaketmappen er alltid der.
For å importere path.py-modulen fra ansette / utils, må du bruke følgende kommando:
importere ansible.utils.path
Hvis du også vil bruke standard os.oath-modulen, bruker du følgende kommando:
import os.path
Nå kan du bruke begge eller begge vei modulene uten konflikter på grunn av forskjellen navneområdet de tilhører.
Standardbiblioteket har mange pakker. Det er verdt å utforske det når du trenger å utføre en viss oppgave, og du er ikke sikker på hvordan. Det er en meget stor sannsynlighet for at for enhver generell oppgave som matte, shellintegrasjon, OS-integrasjon, strengmanipulering, nettverk og vanlige filformater, er det en godt utformet, veldrevet og velprøvd pakke i standardbiblioteket.
Du kan virkelig stole på standardbibliotekspakker fordi det er en stor avtale å komme inn i standardbiblioteket. Enten ble pakken designet av Pythons kjerneutviklere, eller den ble tungt gjennomgått og ofte tungt brukt i feltet som et tredjepartsbibliotek før det ble gjort til standardbiblioteket.
Her er alle pakkene i standardbiblioteket organisert etter emne.
Standardbiblioteket er kjempebra, men det vil ofte være noen spesiell funksjonalitet du trenger som ikke er standard. Det betyr ikke at du må skrive det fra grunnen av. Python har et levende og aktivt samfunn som utvikler og deler fritt mye kode. Skriv inn PyPI - Python Package Index. PyPI er vert for alle offentlig tilgjengelige pakker og tilbyr en one-stop-butikk for å bla gjennom dem.
PyPI organiserer pakkene i en gjennomsiktig indeks. Du kan bla gjennom og søke etter emne, miljø, rammeverk, utvikling, status, målgruppe, lisens, naturlig språk, programmeringsspråk (ja, det finnes Python-pakker som støtter mange programmeringsspråk) og operativsystem.
Det er også et skille mellom Python 2 og Python 3-pakker, og du kan se hvor populær en pakke er med antall nyere nedlastinger. For eksempel er den ansette pakken tilgjengelig på PyPI, og her er dens metadata:
Nedlastinger (alle versjoner): 5528 nedlastinger i den siste dagen 72037 nedlastinger i forrige uke 289967 nedlastinger i forrige måned Forfatter: Ansible, Inc. Hjemmeside: http://ansible.com/ Bug Tracker: http: // github. com / ansible / ansible / Lisens: GPLv3 Kategorier Utviklingsstatus :: 5 - Produksjon / Stabilt Miljø :: Konsoll Forventet Publikum :: Utviklere Foretrukket Publikum :: Informasjonsteknologi Tiltatt Publikum :: System Administrator Lisens :: OSI Godkjent :: GNU General Public Lisens v3 eller senere (GPLv3 +) Naturlig språk :: Engelsk Operativsystem :: POSIX Programmeringsspråk :: Python :: 2.6 Programmeringsspråk :: Python :: 2.7 Emne :: System :: Installasjon / Oppsett Emne :: System :: Systemadministrasjon Emne :: Utilities Package Index Eier: James.Laska, jimi, ansible Pakkeindeks Opprettholder: mpdehaan, badger DOAP rekord: ansible-2.0.0.2.xml
Det er to måter å installere pakker fra PyPI på. Du kan laste ned pakken og deretter kjøre python setup.py installere
. Men den moderne måten er å bruke pip, setuptools og hjul. Pip står for Pip Installs-pakker (ja det er en av de akronymer) og er din forside for installasjon. Hvis du har Python 2> = 2.7.9 eller Python 3> = 3.4 installert fra python.org, vil du allerede ha pip og setuptools, men må oppgradere til den nyeste versjonen: pip installasjon -U pip setuptools
eller python -m pip installasjon -U pip setuptools
på Windows.
Bruk pip for å installere hjulet: pip installasjonshjul
.
Hvis du bruker en tidligere versjon av Python, bør du vurdere å oppgradere. Hvis du ikke klarer det, må du installere pip, oppsettverktøy og hjul på egen hånd. Kontroller instruksjonene.
Python-pakker er alltid installert i et miljø. En vanlig praksis som jeg ikke vil dekke her er å bruke virtuelle miljøer til å håndtere flere uavhengige installasjoner av Python med forskjellige tolker og / eller forskjellige sett med installerte pakker.
Python Packaging Authority gir mye veiledning om beste praksis rundt emballasje. Dette er viktig fordi det er et område med aktiv utvikling og anbefalinger utvikler seg raskt.
Også, hvis du vil gjøre noe spesielt som å installere pakker fra alternative repositorier i stedet for PyPI eller bruke pip på en mer sofistikert måte, finner du gode diskusjoner og praktiske råd.
Når du er en Python-nybegynner, lærer du kjernespråket og har det gøy å leke med det. Ganske snart oppdager du standardbiblioteket, og etter hvert som du får mer erfaring får du mer og mer fordel av sin rikdom.
Den neste fasen i evolusjonen som en Pythonista er å innlemme den enorme awesomeness Python-samfunnet har satt på PyPI i systemene dine. Pakker som distribusjonsenhet av gjenbrukbar Python-kode aktiverer dette økosystemet.