Cum să împărțiți pachetele Python

Prezentare generală

Pachetele Python sunt blocurile de bază ale aplicațiilor Python. Acestea încorporează o serie de funcții coerente care pot fi importate și utilizate de mai multe aplicații și sisteme. Dar mai întâi, dezvoltatorii trebuie să găsească pachetul dvs. și să îl poată instala. Python oferă un depozit public gratuit pentru pachete, care este standardul de facto pentru partajarea pachetelor Python. De asemenea, puteți utiliza depozite private de pachete pentru pachetele de proprietate.

În acest tutorial veți învăța cum să împărțiți propriile pachete cu comunitatea. Dacă aveți pachete de proprietate pe care trebuie să le împărțiți doar în compania dvs., veți învăța cum să faceți acest lucru.

Pentru fundal, consultați Cum se utilizează pachetele Python și cum se scrie propriile pachete Python. 

Ce este PyPI?

PyPI reprezintă indexul pachetelor Python. Este un depozit public pentru încărcarea pachetelor. Pip cunoaște PyPI și poate instala și / sau actualiza pachete din PyPI. PyPI se numea "magazin de brânză" după faimoasa schiță a lui Monty Python. Dacă auziți că oamenii se referă la "Cheese Shop" într-un context de ambalare Python, nu vă faceți griji. Este doar PyPI.

Pregătiți un pachet pentru încărcare

Înainte de a încărca un pachet, trebuie să aveți un pachet. Voi folosi pachetul conman pe care l-am introdus în articolul Cum se scrie propriile pachete Python. Din moment ce PyPI conține mii de pachete, este foarte important să puteți descrie pachetul corect dacă doriți ca oamenii să îl găsească. PyPI acceptă un set impresionant de etichete de metadate pentru a permite oamenilor să găsească pachetul potrivit pentru această slujbă.

Fișierul setup.py conține o mulțime de informații importante care se utilizează pentru a instala pachetul. Dar poate include și metadatele utilizate pentru a vă clasifica pachetul pe PyPI. Pachetele sunt clasificate folosind mai multe etichete de metadate. Unele dintre ele sunt textuale, iar unele dintre ele au o listă de valori posibile. Lista completă este disponibilă în pagina de clasificare a listei PyPI.

Să adăugăm câțiva clasificatori la setup.py. Nu este nevoie să creștem numărul versiunii deoarece este doar metadate și codul rămâne același:

de la setuptools import setup, find_packages setup (nume = 'conman', version = "0.3", url = "https://github.com/the-gigi/conman", license = "MIT", author = "Gigi Sayfan" , author_email = "[email protected]", description = "Gestionarea fișierelor de configurare", classifiers = ['Starea dezvoltării :: 3 - Alpha', 'Audiența dorită :: Dezvoltatori', ' Biblioteca ',' Licență :: Licență OSI :: Licență MIT ',' Limba de programare :: Python :: 2 ',' Limba de programare :: Python :: 2.6 ',' Limba de programare :: Python :: 2.7 ',] pachete = find_packages (exclude = ['teste']), long_description = deschide ('README.md') read (), zip_safe = False, setup_requires = ['nose> = 1.0'], test_suite = "nose.collector" )

Creează un cont

Trebuie să creați un cont pe PyPI pentru a putea încărca pachete. Completați acest formular și confirmați identitatea dvs. făcând clic pe adresa URL din e-mailul de verificare. Acum, trebuie să creați o .pypyrc fișier în directorul de acasă, care va conține informațiile necesare pentru încărcarea pachetelor.

[distutils] index-servers = pypi [pypi] repository = https://pypi.python.org/pypi username = the_gigi 

Puteți adăuga și parola dvs., dar este mai sigur dacă nu faceți acest lucru, în cazul în care un element rău ține de laptop. Acest lucru este deosebit de important dacă încărcați pachete populare, deoarece dacă cineva vă poate încărca sau actualiza pachetele, toate persoanele care utilizează aceste pachete vor fi vulnerabile.

Testarea

Dacă doriți să testați procesul de înregistrare și încărcare a pachetelor și să nu vă îngrijorați să publicați ceva incomplet, puteți lucra cu site-ul alternativ de testare PyPI. Extindeți fișierul ~ / .pypirc pentru a include o secțiune "pypitest".

[distutils] index-servere = pypi pypitest [pypitest] repository = https://testpypi.python.org/pypi username = the_gigi [pypi] repository = https://pypi.python.org/pypi username = the_gigi 

Amintiți-vă că site-ul de testare este curățat în mod regulat, astfel încât să nu se bazeze pe el. Este destinat exclusiv testelor.

Înregistrați-vă pachetul

Dacă aceasta este prima versiune a pachetului, trebuie să îl înregistrați cu PyPI. Sfoara are o comandă de înregistrare, dar nu-mi dau seama cum să o folosesc. După ce documentația produce o eroare și verificând testarea unităților pentru sfoară, nu există nici o încercare pentru comanda de înregistrare. Bine. Puteți folosi manual acest formular pentru a încărca fișierul PKG-INFO. Dacă utilizați Python 2.7.9+ sau Python 3.2+, puteți, de asemenea, să vă înregistrați în condiții de siguranță utilizând Python setup.py registru.

Să se înregistreze conman pe site-ul testului PyPI. Rețineți -r pypitest, care se bazează pe secțiunea din ~ / .Pypirc se va înregistra pe site-ul de testare.

python setup.py registru -r pypitest registru de funcționare running egg_info scriere conman.egg-info / PKG-INFO scrierea numelor de nivel superior la conman.egg-info / top_level.txt scrierea dependency_links la conman.egg-info / dependency_links.txt lectură fișier manifest "conman.egg-info / SOURCES.txt" citirea template-ului manifest "MANIFEST.in" scrierea fișierului manifest "conman.egg-info / SOURCES.txt" alergare verificare Parolă: Înregistrarea conman la https: //testpypi.python. org / pypi Răspunsul serverului (200): OK

împleti

Puteți încărca un pachet utilizând instalarea python setup.py, dar nu este sigur deoarece trimitea numele de utilizator și parola pe HTTP până la Python 2.7.9 și Python 3.2. Sfoara utilizează întotdeauna HTTPS și are avantaje suplimentare cum ar fi încărcarea distribuțiilor pre-create și suportă orice format de ambalaj, inclusiv roți. Voi folosi sfoara pentru încărcarea reală.

Sfoara nu face parte din biblioteca standard, deci trebuie să o instalați: introduceți sfoară.

Încărcați pachetul

În cele din urmă, este timpul să încărcați pachetul. 

> încărcarea sârmei -r pypitest -p ******* dist / * Încărcarea distribuțiilor la https://testpypi.python.org/pypi Încărcarea conman-0.3-py2-none-any.whl Încărcarea conman-0.3-py2 .py3-none-any.whl Încărcarea conman-0.3.tar.gz

Sfoara a încărcat toate formatele de distribuție, atât sursa cât și roțile. 

Testați-vă pachetul

Odată ce pachetul se află pe PyPI, trebuie să vă asigurați că îl puteți instala și că totul funcționează. Aici creez un mediu virtual unic, pip install conman din site-ul de testare PyPI și apoi îl importați. Poate doriți să efectuați mai multe teste pentru pachetul dvs..

> mkvirtualenv test_conman_pypi Executabilul python executabil în test_conman_pypi / bin / python2.7 De asemenea, crearea executabilului în test_conman_pypi / bin / python Instalarea instrumentelor de configurare, pip ... done. Utilizare: dezactivarea sursei elimină directorul "bin" din mediul activat cu "source activate" de la PATH. (test_conman_pypi)> pip install -i https://testpypi.python.org/pypi conman Descărcarea / dezambalarea conman Descărcarea conman-0.3-py2-none-any.whl Stocarea descărcării în cache la /Users/gigi/.cache/pip /https%3A%2F%2Ftestpypi.python.org%2Fpackages%2Fpy2%2Fc%2Fconman%2Fconman-0.3-py2-none-any.whl Instalarea pachetelor colectate: conman Instalat cu succes conman Curățare sus ... (test_conman_pypi)> python Python 2.7 .10 (implicit, 10 iunie 2015, 19:43:32) [GCC 4.2.1 Apple Compatibil Apple LLVM 6.0 (clang-600.0.57)] pe darwin Tipul "ajutor", "copyright", "credite" pentru mai multe informatii. >>> import conman >>>

Rețineți că distribuția roților a fost instalată în mod prestabilit.

versionare

Când vă dezvoltați pachetele și încărcați versiuni noi, este important să urmați o schemă de versiuni sensibilă. Oamenii vor fi destul de suparati daca un upgrade neintentionat va sparge codul. Schema dvs. de versiune trebuie să respecte specificația PEP-440 - Identificarea versiunii și specificația de dependență. 

Această specificație permite alegerea mai multor scheme. Vă recomandăm să utilizați schema populară de editare semantică. Este destul de mult "..", care corespunde cu".."Feriți-vă de versiuni care continuă cu linii de cratimă sau plus, care nu sunt compatibile cu PEP-440.

Pachete private de pachete

PyPI este grozav, dar uneori nu doriți să vă împărtășiți pachetele. Multe companii și organizații au echipe de inginerie care utilizează Python și trebuie să partajeze pachetele între ele, dar nu li se permite să le împărtășească în mod public pe PyPI. Aceasta nu este o problemă. Puteți partaja pachetele din depozitele de pachete private aflate sub controlul dvs.. 

Rețineți că uneori este posibil să doriți să aveți un depozit de pachete private aflat sub controlul dvs. doar pentru a vă gestiona dependențele de la terți. De exemplu, un autor de pachete poate decide să șterge un pachet din PyPI. Dacă sistemul dvs. se bazează pe posibilitatea de a instala acest pachet din PyPI, aveți probleme.

Devpi

Devpi (care reprezintă Indexul pachetelor de dezvoltare) este un înlocuitor de tip drop-in pentru serverul public PyPI. Este licența open source și MIT, astfel încât să o puteți executa în interiorul firewallului. Devpi este foarte puternic și are multe caracteristici care îi permit să funcționeze ca server de ambalare final:

  • Oglindă rapidă PyPI
  • Încărcarea, testarea și punerea în scenă cu indexuri private
  • Index moștenire
  • Interfață web și căutare
  • replică
  • Importul / Exportul
  • Integrarea Jenkins

Devpi are o documentație excelentă, un sistem de pluginuri și este în dezvoltare activă cu o comunitate vibrantă.

Concluzie

Python oferă o soluție completă pentru găzduirea pachetelor și pentru punerea lor la dispoziția colegilor dvs. Pythonistas. Există un proces raționalizat, ajutat de instrumente pentru pachetul și încărcarea pachetelor și pentru a le facilita găsirea și instalarea acestora. 

Dacă aveți nevoie să păstrați lucrurile private, Devpi este aici pentru dvs. ca un depozit de pachete private și robust. 

Cod