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