Paras tapa asentaa Poetry on se, että ei asenna sitä ollenkaan! Tarkemmin sanottuna, ei asenneta Poetryä suoraan omalle koneelle, vaan sen sijaan käytetään Pythonin ja Poetryn sisältämää Docker imagea ja suoritetaan komennot imagesta luodun Docker-kontin sisällä.

Seuraavassa käydään läpi kaksi tapaa, kurssille tehdyn Docker imagen käyttö, sekä VS Coden Dev Containerit.

Docker imagen käyttö

Jos haluat käyttää Dockeria “suoraan”, voit hyödyntää kurssia varten konfiguroitua Docker imagea mluukkai/poetry, ks myös GitHub-repositorio.

Poetryn käyttö tapahtuu seuraavasti. Mene hakemistoon, jossa haluat suorittaa Poetry-komentoja. Joudut (todennäköisesti) antamaan hakemiston sisältöön kirjoitus- ja lukuoikeudet Dockerille komennolla:

chmod  o=rw .

Suorita seuraava komento

docker run -it --volume="$PWD:/mydir" mluukkai/poetry:intel

Jos koneesi on M1 mac, komennon muoto on seuraava:

docker run -it --volume="$PWD:/mydir" mluukkai/poetry:m1

Komento avaa komentotulkin Docker-konttiin, jossa kaikki Poetry-komennot, esim. poetry init, poetry add, eval $(poetry env activate) ym. ovat käytettävissä. Virtuaaliympäristön käynnistämiseen on myös tehty alias activate.

Kontti näkee kaikki käynnistyshakemistossa olevat tiedostot. Voit editoida tiedostoja normaaliin tapaan tekstieditorilla kontin ulkopuolella. Docker-kontissa oleva komentotulkki sulkeutuu komennolla exit.

Lisää Dockerista kurssilla DevOps with Docker.

Visual Studio Dev Containers

VS Coden Dev containers -laajennus tarjoaa erittäin kliinisen ja helppokäyttöisen tavan Dockerin hyödyntämiseen softakehityksessä.

Jos koneellasi on Docker, on Dev Containerien käyttö erittäin helppoa.

Aloita asentamalla Dev Containers -laajennus:

Olemassa olevalle Poetry-projektille kehitysympäristön asentaminen tapahtuu tätä ohjetta noudatellen seuraavasti:

Avaa VS Codeen hakemisto, jonka sisällä on Poetry-projekti.

Suoritetaan komento Dev Containers: Open Folder in Container:

Avataan nykyinen hakemisto, ja valitaan ensimmäinen vaihtoehto, joka tallentaa kehitysympäristön konfiguraatiot nykyiseen hakemistoon:

Poetry ei ole tarjolla heti, joten valitaan Show all templates:

Tämän jälkeen haluamamme löytyy:

Valitaan seuraavaksi Pythonin versio. Valitettavasti tuorein tarjolla oleva Pythonin versio on 3.11. Seuraavista valinnoista otetaan default ja ok.

Kestää hetken, kunnes ympäristö on valmis. Tämän jälkeen Poetry on käytettävissä VS Coden terminaalin kautta:

Muuta ei tarvita!

Dev Containers tallettaa kehitysympäristön tiedot projektin juuressa olevaan hakemistoon .devcontainer. Hakemisto sisältää konfiguraatiotiedoston .devcontainer.json sekä tiedoston Dockerfile, jotka yhdessä määrittelevät kehitysympäristön.

Valmiiksi konfiguroidussa Python with Poetry -ympäristössä on nyt käytössä Pythoinin versio 3.11. Versio on itseasiassa helppo päivittää muuttamalla yhtä riviä Dockerfilestä:

FROM mcr.microsoft.com/devcontainers/base:jammy

//...

# Python and poetry installation
USER $USER
ARG HOME="/home/$USER"
ARG PYTHON_VERSION=3.11. # vaihdetaan tähän 3.12

ENV PYENV_ROOT="${HOME}/.pyenv"
ENV PATH="${PYENV_ROOT}/shims:${PYENV_ROOT}/bin:${HOME}/.local/bin:$PATH"

// ...

Muutoksen jälkeen VS Code buildaa imagen uudelleen, ja tämän jälkeen kehitystympäristön python on päivittynyt!

Seuraavan kerran, kun palaat projektin pariin, valitse Dev Containers: Reopen in Container:

Docker ja Robot-testit

Web-sovelluksia testatessa käytä imagen mluukkai/poetry sijaan imagea mluukkai/poetry-robot. Image toimii ainoastaan intelin prosessoriarkkitehtuurilla varustetuilla koneilla, eli M1 käyttäjät joutuvat etsimään jonkun muun ratkaisun…

Jotta kontissa suoritettu web-sovellus näkyisi isäntäkoneelle, tulee konttia käynnistettäessä julkaista kontin portti 5001 (jossa sovellus toimii) isäntäkoneen porttiin. Tämä tapahtuu seuraavasti:

docker run -it -p 5001:5001 --volume="$PWD:/mydir" mluukkai/poetry-robot

Robot-testit suoritetaan menemällä komennolla docker exec samaan kontiin, missä sovellus on jo päällä:

docker exec -it kontainerintunnistetahan bash

Kontin tunniste selviää komennolla docker ps.

Testit toimivat valitettavasti ainoastaan ns. headless-tilassa, jonka saat päälle tehtävän 4 alussa neuvotulla tavalla.

Testit on mahdollista saada toimimaan myös siten että testejä suorittava selain näytetään. Tämä vaatii kuitenkin erinäistä säätöä, googlaa jos kiinnostaa esim. hakusanoilla linux docker gui apps.