pip 缓存坑
Python 下常用的一个包管理工具就是 pip,今天我在一台服务器上部署 uWSGI 的时候遇到了这么个坑。
uWSGI 的 internal routing 依赖于 pcre,第一次用 pip 安装好后运行 uwsgi
时会出一个 !!! no internal routing support, rebuild with pcre support !!!
的警告,嘛……那我们就安装完 pcre 后重新安装下 uWSGI 好了。
但是重新安装 uWSGI 的时候发现 pip 好像是直接从缓存中拿出了上次编译后的 uwsgi
文件,并没有重新编译一份。于是翻了下 pip 的手册说可以带上 --no-cache-dir
来取消缓存,试了下,OK 了。
但是 pip 的缓存目录到底在哪里呢?
Google 了好久,有人说在 /tmp
下几个 pip 开头的文件里,但是 /tmp
里并没有关键的缓存文件,只有几个压缩包?
最后跟了下 pip 的源码,在 pip.utils.appdirs
的 user_cache_dir
中可以看见一段注释:
r"""
Return full path to the user-specific cache dir for this application.
"appname" is the name of application.
Typical user cache directories are:
Mac OS X: ~/Library/Caches/<AppName>
Unix: ~/.cache/<AppName> (XDG default)
Windows: C:\Users\<username>\AppData\Local\<AppName>\Cache
On Windows the only suggestion in the MSDN docs is that local settings go
in the `CSIDL_LOCAL_APPDATA` directory. This is identical to the
non-roaming app data dir (the default returned by `user_data_dir`). Apps
typically put cache data somewhere *under* the given dir here. Some
examples:
...\Mozilla\Firefox\Profiles\<ProfileName>\Cache
...\Acme\SuperApp\Cache\1.0
OPINION: This function appends "Cache" to the `CSIDL_LOCAL_APPDATA` value.
"""
缓存目录其实是在当前用户 home
下的 .cache
文件夹里,里面有个 pip 文件夹,删除后,重新安装 uWSGI
时就会重新编译了。
对于 virtualenv 而言,缓存也是在当前操作用户的 .cache
里。