在切换到不同的 Python 二进制文件后强制 `pip` 重新编译先前安装的包(numpy)

Forcing `pip` to recompile a previously installed package (numpy) after switching to a different Python binary

这个问题既是关于我的特定问题(我找到了一个解决方法,所以它不是一个紧迫的问题)的问题,也是关于我正在使用的一般过程的问题。


设置(有效的部分):

我在我的 Ubuntu 14.04 上本地安装了 Python 2.7.9,并且我有一个 virtualenv,我在其中 运行 它。一切都与我不接触的“系统”Python 相距甚远。


我做的部分:

一切顺利,安装了我的 Python 和所有库 运行。比如我也pip安装了numpy 1.10.1,编译了一段时间,就可以正常运行了。

问题:

问题是由于我无法控制的原因,我不得不重建 python 并启用 ucs4,也就是说我使用

安装了它
./configure --enable-unicode=ucs4

这样做之后,我还卸载了所有库并使用 pip 重新安装它们。然而,似乎 numpy 库没有正确卸载,因为它这次立即安装,当我尝试将 numpy 导入我的新 Python 时,我收到一条错误消息,表明 numpy 已编译ucs2 启用 Python.

这个假设是非常可靠的,因为我当时尝试 pip install numpy==1.9.3。安装再次花费了很长时间,它产生了一个 numpy 版本 ,适用于新的 ucs4 启用 Python.

现在,我的问题是:

How can I get the numpy uninstallation process to delete all traces of the old numpy?


编辑:

我还尝试通过从我的 virtualenv site-packages 目录中删除它来手动删除 numpy。删除后,import numpy 按预期返回了 ImportError。然后我重新安装了它 (pip install numpy),它返回时出现了与 ucs2 相关的相同错误。

编辑 2:

我的 virtualenv Python 看到的完整 sys.path

['',
 '/home/jkralj/.virtualenvs/work/lib/python27.zip',
 '/home/jkralj/.virtualenvs/work/lib/python2.7',
 '/home/jkralj/.virtualenvs/work/lib/python2.7/plat-linux2',
 '/home/jkralj/.virtualenvs/work/lib/python2.7/lib-tk',
 '/home/jkralj/.virtualenvs/work/lib/python2.7/lib-old',
 '/home/jkralj/.virtualenvs/work/lib/python2.7/lib-dynload',
 '/usr/local/lib/python2.7.9/lib/python2.7',
 '/usr/local/lib/python2.7.9/lib/python2.7/plat-linux2',
 '/usr/local/lib/python2.7.9/lib/python2.7/lib-tk',
 '/home/jkralj/.virtualenvs/work/lib/python2.7/site-packages']

此外,重要的是要提到 python /usr/local/lib/python2.7.9/ 安装没有 安装 numpy。

通过pip卸载numpy(或任何其他麻烦的包)解决了问题,然后运行

pip install numpy --no-cache-dir

防止 pip 简单地获取缓存安装并重复它。

您可以使用 --no-binary--ignore-installed 重建一个包,如下所示

pip install --user --force-reinstall --ignore-installed --no-binary :all: PackageName