Od ponad roku zdarza mi się często “pokodzić” coś w pythonie a jako, że wcześniej głównie pisałem skrypty w bashu to vim w zupełności mi wystarczał. Tak więc w tym czasie przekonałem się do vs code, pyenva do zarządzania virtualenvami i różnymi wersjami pythona i od jakiegoś czasu również devcontenera.
Jak ktoś nie wie co to to szybciutko: konterer z predefiniowana konfuguracja dla całego środowiska no i vscode oczywiście. Ku pamięci wrzucam co używam lokalnie ale można to oczywiście mega rozbudować co też testowałem w pracy i działa to bardzo płynnie. Od pewnego czasu nawet na applowych procesorach dzięki dodaniu wsparcia dla rosetty działa to na mac os całkiem zgrabnie.
Potrzebujemy oczywiście vscode (https://code.visualstudio.com/docs/setup/linux) + docker:
sudo apt install apt-transport-https ca-certificates curl gnupg2 software-properties-common
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"
sudo apt update
sudo apt install docker-ce
sudo usermod -aG docker ${USER}
i dalej w repo w którym chcemy korzystać z devcontenera dodajemy:
vscode ➜ /workspaces/code/devcontainer (master) $ ls -l .devcontainer total 8 -rw-r--r-- 1 vscode vscode 725 Nov 16 10:51 Dockerfile -rw-r--r-- 1 vscode vscode 1166 Nov 16 10:46 devcontainer.json cat .devcontainer/Dockerfile #BASE IMAGE FROM --platform=linux/amd64 mcr.microsoft.com/devcontainers/python:0-3.11 #ENVS ENV SHELL /usr/bin/zsh #additional packages RUN apt update && apt install -y vim USER vscode WORKDIR /home/vscode RUN wget https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh -O - | zsh || true RUN sed -i -e 's/plugins=(git)/plugins=(git vi-mode)/' ~/.zshrc RUN curl https://pyenv.run | bash RUN echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc RUN echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc RUN echo 'eval "$(pyenv init -)"' >> ~/.zshrc ENV HOME /home/vscode ENV PYENV_ROOT $HOME/.pyenv ENV PATH $PYENV_ROOT/shims:$PYENV_ROOT/bin:$PATH RUN pyenv install 3.12 cat .devcontainer/devcontainer.json { "build": { "dockerfile": "Dockerfile" }, "customizations": { "vscode": { "extensions": [ "ms-python.python", "njpwerner.autodocstring", "eamodio.gitlens", "redhat.vscode-yaml", "ms-python.isort", "ms-python.flake8", "ms-python.black-formatter", "trond-snekvik.simple-rst", "redhat.ansible" ], "settings": { "files.insertFinalNewline": true, "editor.formatOnSave": true, "flake8.args": [ "--ignore=E501,W503,F722" ] }, "terminal.integrated.defaultProfile.linux": "zsh", "terminal.integrated.profiles.linux": { "zsh": { "path": "/usr/bin/zsh" } } } }, "features": {}, "mounts": [ "source=${localEnv:HOME}${localEnv:USERPROFILE}/.ssh,target=/home/vscode/.ssh,type=bind,consistency=cached" ], "name": "pakos", "postCreateCommand": "" }
Bonus: devcontainer cli
➜ devcontainer git:(master) devcontainer devcontainer <command> Commands: devcontainer open [path] Open a dev container in VS Code devcontainer up Create and run dev container devcontainer set-up Set up an existing container as a dev container devcontainer build [path] Build a dev container image devcontainer run-user-commands Run user commands devcontainer read-configuration Read configuration devcontainer outdated Show current and available versions devcontainer upgrade Upgrade lockfile devcontainer features Features commands devcontainer templates Templates commands devcontainer exec <cmd> [args..] Execute a command on a running dev container Options: --help Show help [boolean] --version Show version number [boolean] devcontainer@0.52.1 /home/pakos/.vscode/extensions/ms-vscode-remote.remote-containers-0.321.0 Not enough non-option arguments: got 0, need at least 1