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

5xu*_*xum 19 python installation numpy pip virtualenv

这个问题同样是关于我的特定问题的问题(我发现这是一个解决问题,因此它不是一个燃烧的问题),因为它与我正在使用的一般过程有关.


设置(有效的部分):

我在我的Ubuntu 14.04上本地安装了Python 2.7.9,我有一个virtualenv,我正在运行它.一切都与"系统"Python分开,我没有触及.


我做的部分:

这一切都开始得很好,安装了我的Python并运行了所有库.例如,我也pip安装了numpy 1.10.1,它编译了一段时间,然后它运行得很好.

问题:

问题是,由于我无法控制的原因,我不得不重启python并ucs4启用,即我使用它安装它

./configure --enable-unicode=ucs4
Run Code Online (Sandbox Code Playgroud)

执行此操作后,我还卸载了所有库并使用pip重新安装它们.但是,似乎numpy库没有正确卸载,因为它这次立即安装,当我尝试导入numpy到我的新Python时,我收到一条错误消息,指出numpy是用ucs2-enabled Python 编译的.

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

现在,我的问题:

如何才能获得numpy卸载过程以删除旧numpy的所有痕迹?


编辑:

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

编辑2:

sys.path我的virtualenv Python 完全看到了

['',
 '/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']
Run Code Online (Sandbox Code Playgroud)

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

Fra*_*ing 28

您可以按如下方式使用--no-binary--ignore-installed重建包

pip install --user --force-reinstall --ignore-installed --no-binary :all: PackageName
Run Code Online (Sandbox Code Playgroud)

  • 请注意,“:all:”是“--no-binary”的参数,因此标志的顺序很重要。 (2认同)

5xu*_*xum 18

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

pip install numpy --no-cache-dir
Run Code Online (Sandbox Code Playgroud)

防止pip简单地进行缓存安装并重复它.

  • `--no-cache-dir`没有强制_recompilation_,它只是使pip重新下载了该软件包。--no-binary:all:`强制重新编译(运行setup.py)。 (2认同)