Acum câteva luni, am decis să eliberez Caer, un pachet Computer Vision disponibil în Python. Mi s-a părut că procesul este extrem de dureros. Probabil puteți ghici de ce – puțină documentație (și confuză), lipsa unor tutoriale bune și așa mai departe.

Așa că am decis să scriu acest articol în speranța că va ajuta oamenii care se luptă să facă acest lucru. Vom construi un modul foarte simplu și îl vom pune la dispoziția oricui din întreaga lume.

Conținutul acestui modul urmează o structură foarte de bază. Există, în total, patru fișiere Python, fiecare dintre ele având o singură metodă. Vom păstra acest lucru simplu deocamdată.

base-verysimplemodule  --> Base
└── verysimplemodule   --> Actual Module
    ├── extras
    │   ├── multiply.py
    │   ├── divide.py
    ├── add.py
    ├── subtract.py

Veți observa că am un folder numit verysimplemodule care, la rândul său, are două fișiere Python add.py și subtract.py. Există, de asemenea, un folder numit extras (care contine multiply.py și divide.py). Acest folder va sta la baza modulului nostru Python.

Scoaterea __init__s

Ceva în care veți găsi întotdeauna fiecare Pachetul Python este un __init__.py fişier. Acest fișier îi va spune Python să trateze directoare ca module (sau sub-module).

Foarte simplu, va conține numele tuturor metodelor din toate fișierele Python care se află în directorul său imediat.

Un tipic __init__.py fișierul are următorul format:

from file import method 

# 'method' is a function that is present in a file called 'file.py'

Când creați pachete în Python, trebuie să adăugați un __init__.py fișier din fiecare subdirector din pachetul dvs. Aceste subdirectoare sunt sub-module din pachetul dvs.

Pentru cazul nostru, vom adăuga fișierele noastre __init__.py în directorul „modul actual” verysimplemodule, asa:

from add import add
from subtract import subtract

și vom face același lucru pentru extras dosar, ca acesta:

from multiply import multiply
from divide import divide

Odată ce ați terminat, suntem cam la jumătatea procesului!

Cum se configurează setup.py

În cadrul base-verysimplemodule folder (și în același director cu modulul nostru verysimplemodule ), trebuie să adăugăm un setup.py fişier. Acest fișier este esențial dacă intenționați construi modulul actual în cauză.

Notă: Simțiți-vă liber să numiți setup.py înregistrați după cum doriți. Acest fișier nu este specific pentru nume ca al nostru __init__.py fișierul este.

Posibile alegeri de nume sunt setup_my_very_awesome_python_package.py și python_package_setup.py , dar este de obicei cea mai bună practică cu care să rămâi setup.py.

setup.py fișierul va conține informații despre pachetul dvs., în special Nume a pachetului, versiune, dependențe de platformă și multe altele.

În scopurile noastre, nu vom solicita informații meta avansate, așa că următorul cod ar trebui să se potrivească majorității pachetelor pe care le construiți:

from setuptools import setup, find_packages

VERSION = '0.0.1' 
DESCRIPTION = 'My first Python package'
LONG_DESCRIPTION = 'My first Python package with a slightly longer description'

# Setting up
setup(
       # the name must match the folder name 'verysimplemodule'
        name="verysimplemodule", 
        version=VERSION,
        author="Jason Dsouza",
        author_email="<youremail@email.com>",
        description=DESCRIPTION,
        long_description=LONG_DESCRIPTION,
        packages=find_packages(),
        install_requires=[], # add any additional packages that 
        # needs to be installed along with your package. Eg: 'caer'
        
        keywords=['python', 'first package'],
        classifiers= [
            "Development Status :: 3 - Alpha",
            "Intended Audience :: Education",
            "Programming Language :: Python :: 2",
            "Programming Language :: Python :: 3",
            "Operating System :: MacOS :: MacOS X",
            "Operating System :: Microsoft :: Windows",
        ]
)

După ce a făcut acest lucru, tot ce trebuie să facem în continuare este să executăm următoarea comandă în același director ca base-verysimplemodule:

python setup.py sdist bdist_wheel

Aceasta va construi toate pachetele necesare de care va avea nevoie Python. sdist și bdist_wheel comenzile vor crea o distribuție sursă și o roată pe care o puteți încărca ulterior în PyPi.

PyPi – iată-ne!

PyPi este depozitul oficial Python unde sunt stocate toate pachetele Python. Vă puteți gândi la asta ca la Github pentru pachetele Python.

Pentru a vă pune pachetul Python la dispoziția oamenilor din întreaga lume, va trebui să aveți un cont cu PyPi.

După ce am făcut acest lucru, suntem pregătiți să încărcăm pachetul nostru pe PyPi. Amintiți-vă distribuția sursei și roata care au fost construite atunci când am fugit python setup.py ? Ei bine, acestea sunt cele care vor fi încărcate de fapt în PyPi.

Dar înainte de a face acest lucru, trebuie să instalați twine dacă nu îl aveți deja instalat. Este la fel de simplu ca pip install twine.

Cum să încărcați pachetul în PyPi

Presupunând că ai twine instalat, continuați și rulați:

twine upload dist/*

Această comandă va încărca conținutul fișierului dist folder care a fost generat automat când am rulat python setup.py. Veți primi un prompt care vă va cere numele de utilizator și parola PyPi, așa că mergeți mai departe și introduceți-le.

Acum, dacă ați urmat acest tutorial până la T, este posibil să primiți o eroare de-a lungul liniei depozitul există deja.

Acest lucru se întâmplă de obicei deoarece există o ciocnire între numele pachetului dvs. și un pachet care există deja. Cu alte cuvinte, schimbați numele pachetului dvs. – altcineva a luat deja acest nume.

Si asta e!

Pentru a mândri pip instalați modulul, porniți un terminal și rulați:

pip install <package_name> 

# in our case, this is
pip install verysimplemodule

Urmăriți cum Python instalează corect pachetul dvs. din binarele care au fost generate anterior.

Deschideți un shell interactiv Python și încercați să importați pachetul:

>> import verysimplemodule as vsm

>> vsm.add(2,5)
7
>> vsm.subtract(5,4)
1

Pentru a accesa metodele de divizare și multiplicare (amintiți-vă că se aflau într-un folder numit extras ?), alerga:

>> import verysimplemodule as vsm

>> vsm.extras.divide(4,2)
2
>> vsm.extras.multiple(5,3)
15

Este la fel de simplu ca asta.

Felicitări! Tocmai ați construit primul pachet Python. Deși foarte simplu, pachetul dvs. este acum disponibil pentru a fi descărcat de oricine din întreaga lume (cu condiția să aibă Python, desigur).

Ce urmeaza?

Testați PyPi

Pachetul pe care l-am folosit în acest tutorial a fost un modul extrem de simplu – operații matematice de bază de adunare, scădere, multiplicare și divizare. Nu are sens să le încărcați direct în PyPi mai ales din moment ce încerci asta pentru prima dată.

Norocos pentru noi, există Testați PyPi, o instanță separată a PyPi în care puteți testa și experimenta pe pachetul dvs. (va trebui să vă înscrieți pentru un cont separat pe platformă).

Procesul pe care îl urmați pentru a încărca în Test PyPi este cam același cu câteva modificări minore.

# The following command will upload the package to Test PyPi
# You will be asked to provide your Test PyPi credentials

twine upload --repository testpypi dist/*

Pentru a descărca proiecte din Test PyPi:

pip install --index-url "https://test.pypi.org/simple/<package_name>"

Informații Meta avansate

Metainformațiile pe care le-am folosit în setup.py fișierul era foarte simplu. Puteți adăuga informații suplimentare precum întreținători multipli (dacă există), e-mail de autor, informații despre licență și o serie întreagă de alte date.

Acest articol se va dovedi deosebit de util dacă intenționați să faceți acest lucru.

Uită-te la alte depozite

Privirea la modul în care alte depozite și-au construit pachetele se poate dovedi foarte utilă pentru dvs.

Când construiești Caer, M-aș uita constant la cum Numpy și Sonet configurați pachetele lor. Aș recomanda să aruncați o privire Caer, Numpy, și Tensorflow depozite dacă intenționați să construiți pachete puțin mai avansate.