Если нужная версия уже стоит в системе, тупо вызываешь её напрямую:
`/usr/bin/python3.8 -m venv myenv` или `python3.8 -m venv myenv`.
А если нету, проще всего поставить pyenv (`pyenv install 3.8.10`) и потом через него создать venv.
Если нужной версии Python в системе нет, но хочется обойтись без pyenv, можно использовать системный пакетный менеджер. Например, в Ubuntu/Debian: `sudo apt install python3.8-venv` — после этого появится исполняемый файл `python3.8`, и venv создастся стандартной командой. На macOS через Homebrew: `brew install python@3.8`, затем вызывайте `/usr/local/opt/python@3.8/bin/python3.8 -m venv myenv`.
Но если вам нужно переключаться между несколькими версиями часто, pyenv удобнее: он не трогает системный Python и хранит версии изолированно. Ещё вариант — `uv`, современный менеджер, который умеет и скачивать интерпретатор, и создавать venv одной командой: `uv venv --python 3.8`. Это быстрее и проще в настройке.
Важный нюанс: при создании venv убедитесь, что в целевой версии установлен пакет `venv` (в некоторых сборках он отдельный). И всегда проверяйте результат: `myenv/bin/python --version` — иначе рискуете получить окружение на версии по умолчанию.