Python-ympäristöjen luominen uudelleen jäljitettävästi venv- ja pip-työkaluilla

Kun pieni toimisto ottaa Python-sovelluksen käyttöönsä tai määrittää tietokoneen uudelleen, sovelluksen pakettikokoonpanon tulisi olla jäljitettävissä. Työkaluilla venv ja pip voidaan valmistella ympäristön hallittu uudelleenluonti. Ratkaisevia ovat puhdas lähtöympäristö, tarkistetut riippuvuudet ja sovellustestit. Pelkkä pakettiluettelon vienti ei takaa toistettavuutta kaikissa ympäristöissä.

1. Määritä edellytykset ja työhakemisto

Kaikki seuraavat Unix-esimerkit on tarkoitettu yksinomaan erilliseen testiprojektiin, ei sovelluksen tuotantohakemistoon. Edellytyksenä on valmiiksi asennettu, ylläpidetty ja projektin kanssa yhteensopiva Python-tulkki. Dokumentoi etukäteen:

  • käytettävä tulkkiversio aliversioineen,
  • käyttöjärjestelmä ja suoritinarkkitehtuuri,
  • projektin tila, tarvittavat asetukset ja käytettävissä olevat sovellustestit.

python3 tarkoittaa tässä tätä tietoisesti valittua tulkkia. Tarkista ennen aloittamista, että komento viittaa siihen; käytä tarvittaessa tulkin täsmällistä polkua. Älä korvaa käyttöjärjestelmän Pythonia äläkä muuta yleistä PATH-muuttujaa. Kaikki suhteelliset polut viittaavat testiprojektin juurihakemistoon. Tiedostonimet, kuten requirements-snapshot.txt, ovat vapaasti valittuja esimerkkinimiä, ja jos niitä muutetaan, muutokset on tehtävä johdonmukaisesti kaikkialle.

2. Valmistele puhdas lähdeympäristö

Luo projektin aiottua tilaa varten oma, aluksi puhdas ympäristö:

python3 -m venv .venv-src

Asenna sinne ainoastaan testiprojektiin tarkoitetut riippuvuudet projektin asennusohjeen mukaisesti. Käytä nimenomaan komentoa .venv-src/bin/python -m pip, jotta et vahingossa käytä toista ympäristöä. Älä siirrä tarkistamatonta pakettikokoelmaa yhteiskäytössä olevasta työympäristöstä äläkä tee pakettien yleisiä joukkopäivityksiä.

venv-dokumentaation mukaan projektin paketit on oletusarvoisesti eristetty. Ympäristö on kuitenkin sidottu perustulkkiinsa, eikä se ole tietoturvahiekkalaatikko. Aktivointia ei tarvita, kun käytetään tulkkien täsmällisiä polkuja. Testaa nyt sovellus sopivilla testitiedoilla; tee vienti vasta sen jälkeen.

3. Tallenna ja tarkista testattu pakettikokoonpano

.venv-src/bin/python -m pip freeze > requirements-snapshot.txt

pip freeze luettelee asennetut paketit. Se ei ole lukitustiedoston riippuvuuksia ratkaiseva työkalu, ja se jättää oletusarvoisesti pois tietyt alustamiseen tarvittavat paketit. Tiedosto on siksi lähtötilanteen tilannekuva, ei tulkin, työkalujen ja alustan täydellinen kuvaus.

Avaa vientitiedosto aina ennen sen luovuttamista eteenpäin. Tarkista erityisesti muokattavat asennukset, paikalliset polut ja yksityisten pakettien URL-osoitteet. Poista tunnistetiedot eteenpäin luovutettavista tiedostoista. Selvitä samalla, miten tarvittavat yksityiset paketit pysyvät saatavilla asianmukaisin käyttöoikeuksin; pelkkä näiden merkintöjen poistaminen ei tee uudelleenluonnista täydellistä. Kirjaa sekä suorat että välilliset riippuvuudet sen sijaan, että luettelisit vain välittömästi käytetyt kirjastot.

4. Luo ympäristö uudelleen erillään ja varmista tulos

Säilytä .venv-src muuttamattomana. Luo sen rinnalle toinen ympäristö sopivalla, yhteensopivalla tulkilla ja asenna tarkistettu luettelo:

python3 -m venv .venv-rebuild
.venv-rebuild/bin/python -m pip install -r requirements-snapshot.txt
.venv-rebuild/bin/python -m pip check

pip check tarkistaa ainoastaan ilmoitettujen riippuvuuksien yhteensopivuuden. Tulos, jossa ei havaita ongelmia, ei korvaa sovellustestejä eikä tietoturvatarkastusta. Tee siksi samat toiminnalliset tarkistukset kuin lähdeympäristössä: esimerkiksi suunniteltu tuonti, tyypillinen käsittelyajo ja tulosten tarkistus. Käynnistä myös nämä tarkistukset nimenomaan tulkilla .venv-rebuild/bin/python. Dokumentoi virheet ja testitulokset ennen kuin hyväksyt uudelleen luodun ympäristön.

5. Dokumentoi alusta ja pakettitiedostot tarkemmin

Jäljitettävyyden parantamiseksi kirjaa lisäksi käytetyt Python- ja pip-versiot sekä käyttöjärjestelmä ja arkkitehtuuri. Toistettavia asennuksia koskevan pip-ohjeen mukaan täysin määritetyt suorat ja välilliset riippuvuudet sekä tarkistetut pakettien tiivisteet voivat varmistaa menettelyä entisestään. Tiivisteet vahvistavat, että pakettitiedostot ovat odotettuja, eivät sitä, että ne olisivat haittaohjelmattomia. Wheel-arkistot voivat olla alustakohtaisia, joten toisella arkkitehtuurilla saatavilla oleva pakettikokoonpano ei ole automaattisesti samanarvoinen.

6. Varmista paluumahdollisuus ja kirjaa tulos

Säilytä aiempi ympäristö sekä sovelluksen ja tietojen varmuuskopio, kunnes uuden ympäristön toimivuus on varmistettu. Jos ilmenee virheitä, hylkää vain uusi testiympäristö ja selvitä syy; aiempi työskentely-ympäristö säilyy koskemattomana. Virtuaaliympäristöt luodaan uudelleen, niitä ei siirretä eikä kopioida.

Yhteenveto: Käyttökelpoinen uudelleenluonti koostuu tarkistetusta pakettiluettelon viennistä, dokumentoidusta alustasta ja onnistuneista sovellustesteistä. Tämä yhdistelmä tekee muutoksista jäljitettäviä sekoittamatta pakettiluetteloa kattavaan toistettavuustakuuseen.