【Python】キャッシュを利用せずに pip install を行う

キャッシュを利用せずにpip installを行うための方法解説ページアイキャッチ

このページにはプロモーションが含まれています

pip install 時にキャッシュが利用されるせいで上手くインストールが行えず困ったので、備忘録として解決策を記事にまとめておきます。

キャッシュを利用せずに pip install を行う方法

pip install をキャッシュを利用せずに実行するためには、下記のように --no-cache-dir オプションを付加します。

% python -m pip install --no-cache-dir package-name

キャッシュを利用したくなかった理由

なぜキャッシュを利用したくなかったかというと、pip install 時のビルドでリンクされるライブラリを変更したにも関わらず、キャッシュが利用されることでビルドがスキップされてライブラリの変更が反映されなかったためです。

一言では上手く説明できないので超具体的に説明すると、私が pip install でキャッシュが利用されて困ったのは mysqlclient のインストールをしようとした時です。

mysqlclient を pip install でインストールすると、PC 内の MySQL クライアントのライブラリとリンクされて mysqlclient が生成されることになるようです(より正確には mysqlclient から利用されるライブラリが生成される)。

で、最初 mysqlclient を pip install でインストールした際には MAMP というパッケージに含まれる MySQL クライアントのライブラリとリンクされるようにしていました。

MAMPのライブラリとリンクしてmysqlclientが生成される様子

そして、そのあとに素の MySQL をインストールしたので、そちらの MySQL クライアントのライブラリとリンクして mysqlclient が生成されるよう PATH などを変更し、まずは mysqlclient の pip uninstall を行いました。

mysqlclientを一旦uninstallする様子

そして、素の MySQL クライアントのライブラリとリンクした mysqlclient を生成するために再度 pip install を行いました。

が、それでも mysqlclient は MAMP 側のライブラリにリンクされたもののままだったんですね…。

PATH変更後もMAMP側のライブラリにリンクされたmysqlclientがインストールされてしまう様子

要は一回目の pip install 時にビルドして生成された mysqlclient のデータがキャッシュに残っていて、二回目の pip install には mysqlclient のビルドがスキップされて(スキップされる処理が一部のものなのか全部なのかは不明)、キャッシュに残っていたデータが利用されてインストールされたということです。

なので、リンクされるライブラリを変更しようとしても pip install しても反映されなかったということです。

キャッシュからmysqlclientが生成されてしまう様子

で、下記のようにキャッシュを利用せずに pip install を行うようにすることで、ビルドがスキップされなくなって無事に素の MySQL の MySQL クライアントのライブラリを利用する mysqlclient をインストールすることができました。

キャッシュを使用しないようにすることで所望のライブラリとリンクされたmysqlclientが生成されるようになったことを示す図

スポンサーリンク

まとめ

このページでは、pip install 時にキャッシュを利用せずにインストールするための方法について解説しました。

具体的には、pip install 時に --no-cache-dir オプションを指定することで、キャッシュ利用無しのインストールを実現することができます。

他にもキャッシュを削除して同様のインストールを実現することもできそうですね!

あまりこのオプションが必要な場面に遭遇することはないかもしれませんが、こういったオプションも存在することを知っておけば、pip 利用時に役に立つこともあるかもしれないです。

また、キャッシュを利用するデメリットについても理解していただけたのではないかと思います。変更を行なった時にそれが反映されないような場合、キャッシュを疑ってみるのもアリかもしれないです。

同じカテゴリのページ一覧を表示

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です