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 クライアントのライブラリとリンクされるようにしていました。
そして、そのあとに素の MySQL をインストールしたので、そちらの MySQL クライアントのライブラリとリンクして mysqlclient
が生成されるよう PATH
などを変更し、まずは mysqlclient
の pip uninstall
を行いました。
そして、素の MySQL クライアントのライブラリとリンクした mysqlclient
を生成するために再度 pip install
を行いました。
が、それでも mysqlclient
は MAMP 側のライブラリにリンクされたもののままだったんですね…。
要は一回目の pip install
時にビルドして生成された mysqlclient
のデータがキャッシュに残っていて、二回目の pip install
には mysqlclient
のビルドがスキップされて(スキップされる処理が一部のものなのか全部なのかは不明)、キャッシュに残っていたデータが利用されてインストールされたということです。
なので、リンクされるライブラリを変更しようとしても pip install
しても反映されなかったということです。
で、下記のようにキャッシュを利用せずに pip install
を行うようにすることで、ビルドがスキップされなくなって無事に素の MySQL の MySQL クライアントのライブラリを利用する mysqlclient
をインストールすることができました。
スポンサーリンク
まとめ
このページでは、pip install
時にキャッシュを利用せずにインストールするための方法について解説しました。
具体的には、pip install
時に --no-cache-dir
オプションを指定することで、キャッシュ利用無しのインストールを実現することができます。
他にもキャッシュを削除して同様のインストールを実現することもできそうですね!
あまりこのオプションが必要な場面に遭遇することはないかもしれませんが、こういったオプションも存在することを知っておけば、pip
利用時に役に立つこともあるかもしれないです。
また、キャッシュを利用するデメリットについても理解していただけたのではないかと思います。変更を行なった時にそれが反映されないような場合、キャッシュを疑ってみるのもアリかもしれないです。