Skip to content

asdf vs pyenv

Which should you use? A side-by-side look at what each one does, who it suits, what it costs, how hard it is to set up, and where each falls short.

asdf

Open source · MIT

A command-line tool that manages multiple versions of languages like Ruby, Node.js and Elixir, using plugins.

pyenv

Open source · MIT

A command-line tool for installing and switching between multiple Python versions.

The short answer

Choose asdf if you need…

  • Developers who work on several projects that need different language versions
  • Teams that want one version config file per project
  • People moving from nvm, rbenv or pyenv who want to reuse their existing version files

Choose pyenv if you need…

  • Developers who work on several Python projects that need different Python versions
  • People testing code across multiple Python versions, for example with tox
  • Linux and macOS users who want a per-user Python setup without touching system Python

Side-by-side

asdfpyenv
TypeDev toolDev tool
PriceFree and open sourceFree and open source
LicenceMITMIT
GitHub stars25.6k45.2k
Setup difficultyBeginnerIntermediate
How you get itSee the READMEDownload the app
Main languageGoShell
Last code update5 days ago5 days ago

What each one is

asdf

asdf is a command-line tool that lets you install and switch between different versions of programming languages and runtimes on a per-project basis. You add support for each language by installing a plugin. The README says it works like tools such as nvm, rbenv and pyenv, but in one tool with one set of commands.

pyenv

pyenv is a command-line tool that lets you install several versions of Python on one computer and switch between them. You can set a global default for your user account, set a different version per project, or override it with an environment variable. It is built from shell scripts and works by placing a directory of small wrapper programs called shims on your PATH.

Best for

asdf

  • Developers who work on several projects that need different language versions
  • Teams that want one version config file per project
  • People moving from nvm, rbenv or pyenv who want to reuse their existing version files

pyenv

  • Developers who work on several Python projects that need different Python versions
  • People testing code across multiple Python versions, for example with tox
  • Linux and macOS users who want a per-user Python setup without touching system Python

Strengths

asdf

  • One command set covers multiple languages through plugins
  • Reads existing files such as .nvmrc and .ruby-version, which eases migration
  • Supports shell completion for Bash, Zsh, Fish and Elvish

pyenv

  • Simple, single-purpose design that follows the UNIX tradition, according to the README
  • Written in pure shell scripts, so it does not depend on an existing Python install
  • Supports several Python distributions, including CPython, PyPy, and Stackless Python

Not ideal for

asdf

  • People who only use one language and one version, since a single-language version manager may be simpler
  • Users who need a graphical interface, because the README describes a CLI tool only

pyenv

  • Windows users, since the README says pyenv does not officially support Windows outside WSL; the maintainers point to pyenv-win instead
  • People who want pyenv to also manage virtual environments, since the README says it does not do that; pyenv-virtualenv is a separate project
  • Users who need native Windows Python builds, because the Pythons pyenv installs under WSL are Linux builds

Trade-offs

asdf

  • Each language depends on its own plugin, so support quality varies by plugin (inferred from the plugin model described)
  • The README is short and points to external docs for setup details, so the entry relies on those docs

pyenv

  • Installing a Python version can require build dependencies, which the README covers in a separate wiki page
  • Shell setup is needed so the shims and PATH changes take effect, and the README gives different steps for Bash and other shells
  • No native Windows support; Windows users must use WSL or a fork

Getting started

asdf

Clone the repository

git clone https://github.com/asdf-vm/asdf.git
Step-by-step guide: how to use asdf

pyenv

Automatic installer (recommended, Linux/Unix)

curl -fsSL https://pyenv.run | bash

Install via Homebrew (macOS)

brew install pyenv
Step-by-step guide: how to use pyenv

Frequently asked questions

What is the difference between asdf and pyenv?

asdf: A command-line tool that manages multiple versions of languages like Ruby, Node.js and Elixir, using plugins. pyenv: A command-line tool for installing and switching between multiple Python versions. asdf suits developers who work on several projects that need different language versions, while pyenv suits developers who work on several python projects that need different python versions.

Are asdf and pyenv free?

asdf: Free and open source. pyenv: Free and open source.

Which is easier to set up, asdf or pyenv?

asdf is easier to get started with (rated beginner); pyenv is rated intermediate and usually needs more setup.

Is asdf or pyenv more popular?

pyenv has more GitHub stars (45.2k) than asdf (25.6k). Popularity isn't the same as fit — check which one matches your use case above.

What are other alternatives to asdf and pyenv?

Other options people compare them with include nvm, rbenv, mise, Oh My Posh, inshellisense.

Keep comparing

Built from our catalogue entries for both products: open-source details come from each project's README (AI-assisted, refreshed weekly) and GitHub data; AI-tool details are editorial. Spotted something wrong? Let us know from either product's page.