Starejše odvisnosti
Starejši paketi se lahko zadržujejo in vaša koda Python jih bo z veseljem uporabila. To ni težava, če naj bi bili vaši skripti Python nameščeni lokalno in ne za industrijske namene. Podatkovni znanstveniki, študentje in celo običajni ljudje, ki avtomatizirajo svoje vsakdanje naloge, lahko preprosto nadaljujejo z uporabo starejših paketov.
Težava se začne, ko pošljete kodo v proizvodnjo. Ko to storite, boste verjetno poslali samo svoj glavni skript in ne vse odvisnosti od paketa. Če ste na primer napisali mikrostoritev, ki bo poslana kot funkcija AWS Lambda, bo prvih nekaj vrstic morda uvozilo modul zahteve, kot je ta:
zahteva za uvozPaket zahtev, ki ga je priskrbel lambda AWS, se bo razlikoval od vašega starejšega, zato se lahko program sesuje.
Konflikti
Konflikti se lahko pojavijo tudi tam, kjer različni projekti uporabljajo različne različice istega paketa. Mogoče nekateri starejši projekti potrebujejo starejše pakete pip. Vendar boste morda potrebovali novejši paket za druge projekte. Zagon pip install -U
Navidezna okolja Python
Če uporabljate katero koli različico Pythona nad 3.5 lahko z vgrajenim modulom, imenovanim venv, ustvarite tako imenovana navidezna okolja Python. Ta modul ustvari izolirano mapo ali imenik, v katerem lahko živijo vsi vaši paketi pip in druge odvisnosti. Mapa vsebuje tudi skript za aktiviranje. Kadar želite uporabiti določeno navidezno okolje, preprosto zaženete ta skript, po katerem je mogoče dostopati samo do paketov, ki jih vsebuje ta mapa. Če zaženete pip install, bodo paketi nameščeni znotraj te mape in nikjer drugje. Ko končate z uporabo okolja, ga lahko preprosto 'deaktivirate' in takrat vam bodo na voljo samo globalni pip paketi.
Če uporabljate Ubuntu 18.04 in novejši, vam niti ni treba namestiti upravitelja paketov pip v celotnem sistemu. Pip lahko obstaja v vašem navideznem okolju le, če vam je tako bolj všeč.
Namestitev venv in ustvarjanje navideznih okolij
Ubuntu 18.04 LTS prihaja iz škatle s Pythonom 3.6.x, vendar modul Python venv ni nameščen niti pip. Namestimo samo venv.
$ apt namestite python3-venvNato gremo v imenik, v katerem želite ustvariti svoj imenik navideznega okolja. Zame je ~ / project1
$ cd ~ / projekt1Ustvari svoj venv z naslednjim ukazom, opazi, da je my-env samo ime tega okolja, lahko ga poimenuješ, kot želiš:
$ python3 -m venv my-envOpomba: Nekatere namestitve Python3, na primer tiste, ki so na voljo v sistemu Windows, pokličete tolmač Python z uporabo samo python in ne python3, vendar se to spreminja od sistema do sistema. Zaradi doslednosti bom uporabljal samo python3.
Ko je ukaz končan, boste opazili novo mapo ~ / project1 / my-evn. Če želite aktivirati virtualno okolje my-env, boste morali:
- Teči,
$ source ~ / project1 / my-env / bin / activate
če uporabljate Bash.
Obstajajo alternativni skripti, imenovani activate.ribe in aktiviraj.csh za ljudi, ki uporabljajo ribe oziroma lupine csh. - V operacijskem sistemu Windows lahko skript prikličete tako, da zaženete:
>.\ my-env \ Scripts \ activate.netopir
če uporabljate ukazni poziv, ali,>.\ my-env \ Scripts \ activate.ps1
če uporabljate PowerShell.
Uporaba navideznih okolij
Ko boste skript uspešno zagnali, boste opazili, da se poziv spremeni v nekaj takega, kot je prikazano spodaj, zdaj lahko pakete namestite s pomočjo pip:
(my-env) $ pip3 zahteve za namestitev## Nameščene pakete lahko navedemo z ukazom 'pip freeze'
(my-env) $ pip3 zamrzne
certifi == 2018.10.15
chardet == 3.0.4
idna == 2.7
pkg-resources == 0.0.0
zahteve == 2.20.1
urllib3 == 1.24.1
Dokler je navidezno okolje aktivno (kot kaže poziv), bodo vsi paketi shranjeni samo v imeniku navideznega okolja (my-env), ne glede na to, kje ste v datotečnem sistemu.
Če želite izstopiti iz navideznega okolja, lahko v poziv vtipkate deaktiviraj in vrnili se boste k uporabi sistemske namestitve Pythona. Opazite lahko, da novi paketi, ki smo jih pravkar namestili, ne bodo prikazani v globalni namestitvi pipa.
Če se želite znebiti navideznega okolja, preprosto izbrišite mapo my-env, ki je bila ustvarjena po zagonu modula. Ta okolja lahko ustvarite poljubno.
Zaključek
Z modulom venv so navidezna okolja zdaj na voljo kot standardna značilnost Pythona, še posebej, če nameščate iz Pythona.org. Prej smo imeli veliko implementacij tretjih oseb, imenovanih virtualenv, pyenv itd.
To je povzročilo vedno več napihnjene programske opreme, kot je Anaconda, še posebej priljubljena med podatkovnimi znanstveniki. Dobro je imeti končno poenostavljeno orodje za upravljanje paketov Python, ne da bi morali namestiti veliko drugih nepovezanih neželenih vsebin. Več o venv si lahko preberete tukaj.