dbtenv lets you easily install and run multiple versions of dbt using pip with Python virtual environments, or optionally using Homebrew on Mac or Linux.
dbtenv is a version manager for dbt, automatically installing and switching to the needed adapter and version of dbt.
pipx install dbtenv-dbt-alias
If dbtenv-dbt-alias
is installed per the above, dbt commands can be used as normal and will be routed through dbtenv. dbtenv will automatically determine, install and use the required dbt adapter and version.
Illustrative example
➜ dev/dbt_project ✗ dbt compile
dbtenv info: Using dbt-bigquery==1.0.0 (set by dbt_project.yml).
10:48:43 Running with dbt=1.0.4
10:48:45 Found 73 models, 142 tests, 2 snapshots, 0 analyses, 383 macros, 0 operations, 0 seed files, 44 sources, 0 exposures, 0 metrics
10:48:45
10:49:14 Concurrency: 1 threads (target='dev')
10:49:14
10:49:20 Done.
There are two packages available for installation:
dbtenv
dbtenv-dbt-alias
dbtenv-dbt-alias
is identical to dbtenv
, with the exception of adding a dbt
entry point. The dbt
command then acts as a direct shortcut to dbtenv execute --
, and means that dbtenv can used as a drop-in replacement to installing dbt normally.
dbtenv --help
- Print documentation and available commands. Can also be run for information on a individual command, e.g. dbtenv versions --help
.dbtenv versions
- List the installable versions of dbt, marking those which are currently installed. Add the --installed
flag to show only those which are installed.dbtenv install <dbt_pip_specifier>
- Install a specific version of dbt, e.g. dbtenv install dbt-snowflake==1.0.0
.dbtenv uninstall <dbt_pip_specifier>
- Uninstall a specific version of dbt, e.g. dbtenv uninstall dbt-snowflake==1.0.0
.dbtenv version
- Print the dbt version dbtenv determines automatically for the current environment.dbtenv which
- Print the full path to the executable of the dbt version dbtenv determines automatically for the current environment.dbtenv execute
- Execute a dbt command.If dbtenv-dbt-alias
is installed:
dbt <args>
- The dbt CLI.dbtenv will automatically install the required version of dbt for the current project by default. To disable this behaviour, set the environment variable DBTENV_AUTO_INSTALL
to false
.
By default, dbtenv creates virtual environments for each dbt package version within ~/.dbt/versions
. You can customize this location by setting the DBTENV_VENVS_DIRECTORY
environment variable.
By default, dbtenv uses whichever Python version it was installed with to install dbt, but that can be changed by setting a DBTENV_PYTHON
environment variable to the path of a different Python executable, or specifying --python <path>
when running dbtenv install
.
If dbtenv is invoked within a dbt project, dbtenv will look for the project’s default target adapter type in profiles.yml
. If dbt’s --target
argument is set, dbtenv will use that target’s adapter type instead. To use the dbtenv execute
command outside of a dbt project (such as dbt init
), a pip specifier should be passed to dbtenv execute’s --dbt
argument so that dbtenv knows which adapter to use.
dbtenv determines the dbt version to use from the following sources, using the first one it finds:
dbtenv execute
command’s optional --dbt <version>
argument.The DBT_VERSION
environment variable.
If not running within a dbt project:
.dbt_version
file found searching the working directory path (local version).~/.dbt/version
file (global version).require-dbt-version
.You can:
dbtenv version --global <version>
to set the dbt version globally in the ~/.dbt/version
file. The <version>
can be either a dbt version (e.g. 1.0.0) or full pip specifier (e.g. dbt-snowflake==1.0.0). dbtenv will attempt to automatically detect the required adapter or version from the environment if not specified.dbtenv version --local <version>
to set the dbt version for the current directory in a .dbt_version
file. The <version>
can be either a dbt version (e.g. 1.0.0) or full pip specifier (e.g. dbt-snowflake==1.0.0). dbtenv will attempt to automatically detect the required adapter or version from the environment if not specified.The dbt
command then acts as a direct shortcut to dbtenv execute --
, and means that dbtenv can used as a drop-in replacement to installing dbt normally. dbtenv will automatically identify which package and version of dbt to use. If you need to manually specify a dbt package version to run with, use the dbtenv execute
command.
Run dbtenv execute -- <dbt arguments>
to execute the dbt version determined automatically from the current environment, or run dbtenv execute --dbt <version> -- <dbt arguments>
to execute a specific dbt version.
For example:
dbtenv execute -- run
will execute dbt run
using the version determined automatically from the current environment.dbtenv execute --dbt 1.0.0 -- run
will execute dbt run
using dbt 1.0.0, automatically detecting the required adapter from the default target in profiles.yml
.dbtenv execute --dbt 1.0.0 -- run --target prod
will execute dbt run
using dbt 1.0.0, using the required adapter for the ‘prod’ target in profiles.yml
.dbtenv execute --dbt dbt-bigquery==1.0.0 -- run
will execute dbt run
using dbt-bigquery==1.0.0.pipx install poetry
(What is pipx?)dbtenv
directory, and install the project into a virtual environment poetry install
poetry shell
dbtenv
commands will run using the local version of the project.