※こちらの記事の内容はMacを利用しております。
データのお仕事をしています。モリヤス(@_moriya)です。
dbtの勉強をするために環境構築を行なっていたときのお話
まずはPythonの仮想環境を作ろっと
python3 -m venv venv
おや?なんか不穏なメッセージが流れてきたぞ!
No version is set for command python
Consider adding one of the following versions in your config file at
python 3.12.2
なんかPythonがうまく設定できてないようだな?
てか久しぶりに自分のPCでPython使うな!どうやって自分のPCにPythonの環境構築したんだっけか?
まずはChatGPT君に上記のエラーメッセージを投げてみた!
現代はググるよりChatGPTにまずは投げるよね!
これは pyenv などのツールを使っているときによく出るエラーです。
とのこと
pyenv?
毎度忘れる!なんだっけ?
目次
Pythonのバージョン管理ツール
システム上で複数のPythonバージョンを簡単にインストール・管理・切り替えできるツール
あーはいはい!
Pythonはいろんなバージョンをインストールして使い分けるんだったな(Pythonに限らずではあるか!)
他にpyenvと同じようなツールは
- asdf
- uv
- Rye
などなど
よし!完全理解!
ツールによる違いを理解するのは沼りすぎる可能性大なので、ここでは気にしない気にしない!
じゃあpyenvでPythonの設定をすればいいんだな!
ChatGPT君は、色々詳細に説明を続けて行なってくれているぞ!
どうやら下記のコマンドを実行すると、pyenvでインストール済みのPythonのバージョン一覧を見ることができるらしいぞ!
pyenv versions
すると、またもや不穏なメッセージが流れてきた!
zsh: command not found: pyenv
あー
これはよく見るぞ!
pyenvというコマンドがないって怒られているね!
じゃあ僕がPythonの環境を構築する際に使用したPythonのバージョン管理ツールはpyenvではないのかしら?
天才ChatGPT君に聞いてみます!
pyenv versions を実行したら
zsh: command not found: pyenv
となりました
なんで?
すると下記のような回答が
なるほど、状況わかりました。
プロジェクト内でエラー → そのディレクトリに .tool-versions があり(または asdf が探しに行き)、python のバージョン指定が必要と言われています。
しかし pyenv は入っておらず、エラーメッセージの書式は pyenv ではなく asdf のものです(No version is set for command ... Consider adding one of the following versions in your config file at ... は asdf の定番メッセ)。
つまり「asdf で Python のバージョンが未設定/未インストール」状態が原因です。
なるほど!つまり自分はPythonの管理ツールとしてasdfを入れているっぽいんですね!
天才とはいえ、あまりにもChatGPT君を鵜呑みにするのはよくないので旧天才(いや!今でもしっかりと天才ではあるんだけどな)のGoogle君に聞いてみました!(ググった)
すると下記のような記事が出てきたので、asdfで間違いなさそうです!
ChatGPT君はとても気が利くのです。
先ほどの質問の回答の際に、asdfのバージョンチェック〜Pythonを導入するまでのコマンドまで教えてくれていました!
まずは下記のコマンドでasdfのバージョン確認をします。
asdf --version

バージョン出たのでやはりasdfを使用していそうだな!
続いて、下記コマンドですでにPythonをインストールしているか確認します。
asdf list python

3.12.2というバージョンが入っているようでした。
じゃああとはこのpython3.12.2を使えるようにすればよさそうです。
下記のコマンドで、カレントディレクトリ(dbtのプロジェクト)に適応させます。
asdf local python 3.12.2
よし!これでOKそうだな!
念の為、バージョンを確認しとくか!
python3 -V

これで、最初にやりたかったこと「まずはPythonの仮想環境を作る」ができそう!
python3 -m venv venv

「venv」という名前のディレクトリがカレントディレクトリに作成されたので無事にPythonの仮想環境は構築できました!
めでたしめでたし?
さらっとvenv出てきたな!なんだそれ?
さて
上記で「まずはPythonの仮想環境を作ろっと」とさらっと話しましたが、そもそも仮想環境ってなんで必要なんじゃ?
詳しくは先人の丁寧な記事に任せさせていただきます。
【Python】なぜ仮想環境が必要なのか(初心者向け) #Python – Qiita
簡単にいうと
Pythonを使って作りたいものごとに、異なるバージョンのPythonやパッケージ、ライブラリを使うことがあり、それぞれの環境を作れると便利だから
ということだと思う。
そんな感じの理解でOKだと思う!
そして今回はvenvというツールを使用して仮想環境を作成したということです。
仮想環境を作成・管理することができるツール
他にvenvと同じようなツールは
- Pipenv
- Poetry
- Rye
などなど
よし!完全理解(?)
ツールによる違いを理解するのは沼りすぎる可能性大なので、もちろんここでも気にしない気にしない!
ちなみに、venvで仮想環境を作成するときのコマンドが下記になる
python3 -m venv 仮想環境名(自由に指定できる)
だから「venv」という名前のフォルダの仮想環境ができたのか!
納得( ^ω^ )
pip?なんそれ?エレキバンですか?
さて
ようやく僕が学びたい事柄の本題であったdbtのプロジェクト作成の次のステップに進めるぞ!
まずは下記コマンドでPythonの仮想環境に入ります。
source venv/bin/activate

入れたようです。
次に、pipを使ってdbtをインストールしていきます。
pip?
はい!またまた出てきました。何度も聞いたことあるけど忘れてしまうツー
Python のパッケージ管理ツール
少し今回の記事の内容からは脱線しますが、これまで何気なく使っていたdbtがPythonのパッケージだということをこの時理解しました。(下記のリポジトリを見たら確かにPythonで書かれていた)
https://github.com/dbt-labs/dbt-core/tree/main/core/dbt
話を戻します。
Pythonは便利なパッケージ・ライブラリがたくさんあるよね!もちろんそれらを使っていきたいよね!しかもそれらのパッケージやらライブラリだって日々アップデートされていくので、管理もしっかりしていかなきゃダメだよな!
上記のようなことってめんどくさいけど、それを簡単にしてくれるツールがpipなんだな
他にpipと同じようなツールは
- venv
- Poetry
- Conda
- Rye
などなど
よし!完全理解(?)
ツールによる違いを理解するのは沼りすぎる可能性大なので、ここでももちろん気にしない気にしない!
ちなみにRyeはPythonのバージョン管理だけではなくて、パッケージの管理もできるのか!
すごいな!(そういうツールは他にもあるみたいです)
pipがどんなものなのか理解できたところ、本題へ!
下記コマンドで、pipを使ってdbtをインストールしていきます。(今回接続するのはbigquery)
python -m pip install dbt-core dbt-bigquery
下記のコマンドでdbtのインストールを確認します。
dbt --version

問題なさそうです!
これでdbtの環境構築が完了しました!
めでたしめでたし???
そういえばrequirements.txtっていうファイル使っていたことがあったような?
一旦上記までで、めでたしめでたしです
おめでとうございます。
これで今後、Pythonの開発環境のツールよくわからなくなることはきっとないはずです!d( ̄  ̄)
ただ、ここで1つ思い出したことがありました。
「そういえばPythonのプロジェクトで『requirements.txt』っていうファイルを使ってたような気がするな〜」
モヤモヤすることはしっかりと理解して終わりにしましょう!
Pythonのプロジェクトで必要なライブラリとそのバージョンを管理するテキストファイル
なるほど!
必須のファイルではないけど、チーム開発などでライブラリのバージョンを一致させるために便利なファイルということだな!(「requirements.txt」がない場合は、最新のバージョンのライブラリなどがインストールされる)
package.jsonと同じようなものと思っておきますわ!
終わりに
これまでに何度もpythonのプロジェクトを作成した経験はありますが、期間が空いてしまうせいか、毎度どんなことだっけかというのを調べていた自分がいました。
ただ、これでそんな自分ともおさらばできる気がしています!
今回の調査でPythonの環境構築する上で色々なツールがあるというのがわかったので、今後はどんな違いがあるかなども詳しく調べてより良いPythonの環境構築ができるようになりたいものですな٩( ᐛ )و
参考記事
- dbt プロジェクトの始め方|dbt 入門
- asdfのインストールメモなど
- asdfによるバージョン管理が楽すぎるのでみんな使おう
- asdfが便利すぎる
- 【Python】なぜ仮想環境が必要なのか(初心者向け) #Python – Qiita
- BigQuery setup | dbt Developer Hub
- dbt CoreでローカルからBigQueryを操作するためのセットアップ方法 | DevelopersIO
- Pythonの開発環境の3つの観点をおさえよう
- pipとはなにか、何ができるか整理してみた【ゼロからPython勉強してみる】 #初心者 – Qiita
- Pythonのrequirements.txtをなるべくちゃんとする #仮想環境 – Qiita
- venvで手軽にPythonの仮想環境を構築しよう #VSCode – Qiita