行ったこと
Windows環境とLinux(Debian)環境で同じパッケージをインストールしている状態で、pip freezeしたら本当に環境ごとに出力結果が異なるか軽く動かしています。
AzureのKey Vaultを実行するパッケージをインストールしたときに、どのような違いが出るかで確認しました。
背景
- 業務でWindowsとLinuxの環境差異でpip install -r requirements.txtがエラーになることが多い
- Windows環境で出力したrequirements.txtをLinux環境で使うのがそもそも良くないらしい
環境
Windows
OS:Windows 11 Pro 23H2
Python:3.9.13
pip:24.0
Linux
OS:Debian GNU/Linux 11 (bullseye)
Python:3.9.13
pip:24.0
各環境上でのパッケージインストール
各環境上で以下を実行します。
pip install azure-identity pip install azure-keyvault-secrets
Windows上では仮想環境を利用していますが、Linux環境では今回はDockerコンテナを利用しているため、仮想環境は利用せずに、コンテナにそのままパッケージをインストールしました。
パッケージのインストールなどはこちらを参考にしています。
pip freezeの実行
それぞれの環境で以下を実行します。
pip freeze > requirements.txt
結果を比較
Winmergeを使い、確認できた結果が以下でした。
左:Windows
右:Linux
pywin32というパッケージがWindows環境でのみrequirements.txtに出力されているのがわかります。
これはAzureリソースへアクセスするためにWindows環境では必要ということなんだと思われます。
(pycparserのバージョンが異なっていますが、今回は無視します)
最後に
Dockerコンテナを利用するなどして、開発環境や本番環境の環境差異をなくすことで、今後インストールパッケージの違いなどからくるエラーをなくしていきたいですね。
WindowsとLinuxでpycparserのバージョンが異なってしましたが、そもそも開発自体もDockerで本番とほぼ同じ環境を用意すれば、環境の違いによるエラーは防げるだろうと思います。
当たり前だろうと思われる方も多かったと思いますが、ここまで読んでくださってありがとうございます。