dbt PR

Pythonの環境構築のツールが毎度よくわからなくなるんじゃ!!【Python】

Pythonの環境構築のツールが毎度よくわからなくなるんじゃ!!【Python】
記事内に商品プロモーションを含む場合があります

※こちらの記事の内容は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のバージョン管理ツール

pyenv(パイエンブイ)とは?

システム上で複数の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(ブイエンブ)とは?

仮想環境を作成・管理することができるツール

他にvenvと同じようなツールは

  • Pipenv
  • Poetry
  • Rye

などなど

よし!完全理解(?)

ツールによる違いを理解するのは沼りすぎる可能性大なので、もちろんここでも気にしない気にしない!

ちなみに、venvで仮想環境を作成するときのコマンドが下記になる

python3 -m venv 仮想環境名(自由に指定できる)

だから「venv」という名前のフォルダの仮想環境ができたのか!

納得( ^ω^ )

pip?なんそれ?エレキバンですか?

さて

ようやく僕が学びたい事柄の本題であったdbtのプロジェクト作成の次のステップに進めるぞ!

まずは下記コマンドでPythonの仮想環境に入ります。

source venv/bin/activate

入れたようです。

次に、pipを使ってdbtをインストールしていきます。

pip?

はい!またまた出てきました。何度も聞いたことあるけど忘れてしまうツー

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』っていうファイルを使ってたような気がするな〜」

モヤモヤすることはしっかりと理解して終わりにしましょう!

requirements.txt とは?

Pythonのプロジェクトで必要なライブラリとそのバージョンを管理するテキストファイル

なるほど!

必須のファイルではないけど、チーム開発などでライブラリのバージョンを一致させるために便利なファイルということだな!(「requirements.txt」がない場合は、最新のバージョンのライブラリなどがインストールされる)

package.jsonと同じようなものと思っておきますわ!

終わりに

これまでに何度もpythonのプロジェクトを作成した経験はありますが、期間が空いてしまうせいか、毎度どんなことだっけかというのを調べていた自分がいました。

ただ、これでそんな自分ともおさらばできる気がしています!

今回の調査でPythonの環境構築する上で色々なツールがあるというのがわかったので、今後はどんな違いがあるかなども詳しく調べてより良いPythonの環境構築ができるようになりたいものですな٩( ᐛ )و