Met Python-pakketten kunt u grote systemen opsplitsen en hun modules op een consistente manier indelen die u en andere mensen efficiënt kunnen gebruiken en hergebruiken. Het motto van Python van "Inclusief batterijen" betekent dat het voorgeladen wordt met veel nuttige pakketten in de standaardbibliotheek.
Maar er zijn ook veel fantastische pakketten van derden waar u van kunt profiteren. In deze tutorial leert u alles wat u moet weten over welke pakketten precies zijn, hoe u modules uit pakketten kunt importeren, het ingebouwde pakket in de standaardbibliotheek van Python kunt verkennen en pakketten van derden kunt installeren..
Voordat we kunnen praten over pakketten, laten we het hebben over modules. Modules zijn de bronbestanden met * .py extensie waar u (en alle anderen) de functies en klassen van uw programma plaatst. Pakketten zijn de manifestatie van het hiërarchische namespaces-concept van Python. Om te citeren uit de Zen van Python:
"Namespaces zijn een geweldig idee - laten we er nog meer van doen!"
Typ om de hele Zen van Python te bekijken importeer dit
in een Python interactieve sessie:
import this The Zen of Python, door Tim Peters Beautiful is better than lelijk. Expliciet is beter dan impliciet. Eenvoudig is beter dan complex. Complex is beter dan gecompliceerd. Flat is beter dan genest. Sparse is beter dan dicht. De leesbaarheid telt. Speciale gevallen zijn niet speciaal genoeg om de regels te overtreden. Hoewel de functionaliteit de zuiverheid verslaat. Fouten mogen nooit stil overgaan. Tenzij expliciet tot zwijgen gebracht. Tegenover onduidelijkheid, weiger de verleiding om te raden. Er moet een - en bij voorkeur slechts een - voor de hand liggende manier zijn om het te doen. Hoewel die manier in het begin misschien niet vanzelfsprekend is, tenzij je Nederlands bent. Nu is beter dan nooit. Hoewel nooit vaak beter dan * goed * nu. Als de implementatie moeilijk uit te leggen is, is het een slecht idee. Als de implementatie gemakkelijk uit te leggen is, kan het een goed idee zijn. Namespaces zijn een geweldig idee - laten we er meer van doen!
Namespaces helpen bij het organiseren van code en het voorkomen van naamconflicten. Dit is van cruciaal belang als meerdere mensen samenwerken of bij het gebruik van pakketten die zijn ontwikkeld door andere mensen.
Hoewel pakketten een hiërarchie van subpakketten en modules vertegenwoordigen, wat bestanden zijn, hoeft de hiërarchie niet op het bestandssysteem gebaseerd te zijn, waarbij pakketten en subpakketten mappen en submappen zijn. Het is veel flexibeler dan dat.
Laten we een pakket bekijken met de naam "ansible". Het is geen pakket uit de standaardbibliotheek. U zult later zien hoe u pakketten van derden kunt vinden en installeren. Laten we nu eens kijken naar de structuur van het directorybestand.
De pakketten worden meestal geïnstalleerd in de site-packages directory van de Python-interpreter, die zich ergens onder de "lib" (afhankelijk van de versie, het besturingssysteem en de distributie) zal bevinden. Op de Mac bevindt het zich voor Python 2.7 in "
tree ansible -L 1 ansible ├── __init__.py ├── cli ├── compat ├── config ├── constants.py ├── fouten ├── executor ├── galaxy ├── inventory ├── module_utils ├── modules ├── parsing ├── playbook ├── plugins ├── sjabloon ├── utils └── vars 15 mappen, 2 bestanden
Er zijn twee modules en 15 mappen. Elke directory is een subpakket van het belangrijkste ansible-pakket. Als we in de directory ansible / utils kijken, kunnen we zien dat het extra modules en zelfs nog een subpakket bevat:
tree ansible / utils -L 1 ansible / utils ├── __init__.py ├── boolean.py ├── cmd_functions.py ├── color.py ├── debug.py ├── display.py ├── encrypt .py ├── hashing.py ├── listify.py ├── module_docs.py ├── module_docs_fragments ├── path.py ├── shlex.py ├── unicode.py └── vars.py 1 directory , 14 bestanden
Wanneer u een module importeert, doorloopt Python een zoekalgoritme op basis van het zoekpad, dat een lijst met mappen is om de zoekopdracht te starten. Het zoekpad is een lijst met directory's die beschikbaar zijn via sys.path
, en je kunt het dynamisch manipuleren (items toevoegen, verwijderen of verplaatsen in het zoekpad). De directory met sitepakketten is er altijd.
Als u de module path.py van ansible / utils wilt importeren, moet u de volgende opdracht gebruiken:
import ansible.utils.path
Als u ook de standaard os.oath-module wilt gebruiken, gebruikt u de volgende opdracht:
importeer os.path
Nu kunt u een of beide padmodules zonder conflicten gebruiken vanwege de verschilnaamruimte waartoe ze behoren.
De standaardbibliotheek heeft veel pakketten. Het is de moeite waard om het te verkennen wanneer je een bepaalde taak moet volbrengen en je weet niet zeker hoe. Er is een zeer grote kans dat voor elke taak voor algemene doeleinden zoals wiskunde, shell-integratie, OS-integratie, stringmanipulatie, netwerken en algemene bestandsindelingen, er een goed ontworpen, goed presterende en beproefde pakket in de standaardbibliotheek is.
U kunt echt vertrouwen op standaardbibliotheekpakketten, omdat het een groot voordeel is om in de standaardbibliotheek te komen. Het pakket is ontworpen door de kernontwikkelaars van Python of het is zwaar beoordeeld en wordt vaak intensief gebruikt in het veld als een externe bibliotheek voordat het in de standaardbibliotheek wordt opgenomen.
Hier zijn alle pakketten in de standaardbibliotheek op onderwerp gerangschikt.
De standaardbibliotheek is geweldig, maar er is vaak een speciale functie die je nodig hebt die niet standaard is. Het betekent niet dat je het helemaal opnieuw moet schrijven. Python heeft een levendige en actieve community die vrij veel code ontwikkelt en deelt. Voer PyPI in - de Python-pakketindex. PyPI host alle openbaar beschikbare pakketten en biedt een one-stop-shop voor het bladeren door ze.
PyPI organiseert de pakketten in een doorzoekbare index. U kunt bladeren en zoeken op onderwerp, omgeving, kader, ontwikkeling, status, beoogde doelgroep, licentie, natuurlijke taal, programmeertaal (ja, er zijn Python-pakketten die vele programmeertalen ondersteunen) en besturingssysteem.
Er is ook een onderscheid tussen Python 2 en Python 3-pakketten, en je kunt zien hoe populair een pakket is door het aantal recente downloads. Het ansible-pakket is bijvoorbeeld beschikbaar op PyPI en hier zijn de metadata:
Downloads (Alle Versies): 5528 downloads op de laatste dag 72037 downloads in de laatste week 289967 downloads in de laatste maand Auteur: Ansible, Inc. Homepage: http://ansible.com/ Bug Tracker: http: // github. com / ansible / ansible / Licentie: GPLv3 Categorieën Ontwikkelingsstatus :: 5 - Productie / stabiele omgeving :: Console beoogd publiek :: Ontwikkelaars bedoeld publiek :: Door de informatietechnologie bedoeld publiek :: Systeembeheerders Licentie :: OSI goedgekeurd :: GNU General Public Licentie v3 of hoger (GPLv3 +) Natuurlijke taal :: Engels Besturingssysteem :: POSIX Programmeertaal :: Python :: 2.6 Programmeertaal :: Python :: 2.7 Onderwerp :: Systeem :: Installatie / Setup Onderwerp :: Systeem :: Systeembeheer Onderwerp :: Hulpprogramma's Pakketindex Eigenaar: James.Laska, jimi, ansible Pakketindex Beheerder: mpdehaan, badger DOAP record: ansible-2.0.0.2.xml
Er zijn twee manieren om pakketten van PyPI te installeren. U kunt het pakket downloaden en vervolgens uitvoeren python setup.py installeren
. Maar de moderne manier is om pip, setuptools en wheel te gebruiken. Pip staat voor Pip Instances Packages (ja, het is een van die acroniemen) en is uw front-end voor installatie. Als je Python 2> = 2.7.9 of Python 3> = 3.4 hebt geïnstalleerd vanaf python.org, heb je al pip- en setuptools, maar moet je upgraden naar de nieuwste versie: pip install -U pip setuptools
of python -m pip install -U pip setuptools
op Windows.
Gebruik pip om wheel te installeren: pip installeer wiel
.
Als u een eerdere versie van Python gebruikt, overweeg dan een upgrade uit te voeren. Als dit niet mogelijk is, moet je pip, setuptools installeren en zelf het stuurwiel gebruiken. Controleer de instructies.
Python-pakketten worden altijd in een omgeving geïnstalleerd. Een veel voorkomende praktijk die ik hier niet zal behandelen, is om virtuele omgevingen te gebruiken om meerdere onafhankelijke installaties van Python te beheren met verschillende tolken en / of verschillende sets van geïnstalleerde pakketten.
De Python-verpakkingsautoriteit geeft veel advies over de beste werkwijzen rond verpakkingen. Dit is belangrijk omdat het een gebied van actieve ontwikkeling is en aanbevelingen snel evolueren.
Als je iets speciaals wilt doen, zoals het installeren van pakketten uit alternatieve opslagplaatsen in plaats van PyPI of het op een meer geavanceerde manier gebruiken van pip, zul je geweldige discussies en praktisch advies vinden.
Als je een Python-beginner bent, leer je de kerntaal en heb je plezier ermee te spelen. Al snel ontdek je de standaardbibliotheek en naarmate je meer ervaring opdoet, profiteer je steeds meer van zijn rijkdom.
De volgende fase in je evolutie als een Pythonista is om de enorme eerbaarheid die de Python-gemeenschap op PyPI heeft gezet op te nemen in je systemen. Pakketten als de inzeteenheid van herbruikbare Python-code maken dit ecosysteem mogelijk.