pip freezeの出力結果をWindowsとLinuxで比べてみた

行ったこと

Windows環境とLinux(Debian)環境で同じパッケージをインストールしている状態で、pip freezeしたら本当に環境ごとに出力結果が異なるか軽く動かしています。
AzureのKey Vaultを実行するパッケージをインストールしたときに、どのような違いが出るかで確認しました。

背景

  • 業務でWindowsLinuxの環境差異で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コンテナを利用しているため、仮想環境は利用せずに、コンテナにそのままパッケージをインストールしました。

パッケージのインストールなどはこちらを参考にしています。

learn.microsoft.com

pip freezeの実行

それぞれの環境で以下を実行します。

pip freeze > requirements.txt

結果を比較

Winmergeを使い、確認できた結果が以下でした。
左:Windows
右:Linux pywin32というパッケージがWindows環境でのみrequirements.txtに出力されているのがわかります。
これはAzureリソースへアクセスするためにWindows環境では必要ということなんだと思われます。 (pycparserのバージョンが異なっていますが、今回は無視します)

最後に

Dockerコンテナを利用するなどして、開発環境や本番環境の環境差異をなくすことで、今後インストールパッケージの違いなどからくるエラーをなくしていきたいですね。

WindowsLinuxでpycparserのバージョンが異なってしましたが、そもそも開発自体もDockerで本番とほぼ同じ環境を用意すれば、環境の違いによるエラーは防げるだろうと思います。
当たり前だろうと思われる方も多かったと思いますが、ここまで読んでくださってありがとうございます。