作者:FloatingGuy 转载请注明出处:https://floatingguy.github.io/


$ pip

1
2
3
File "/Library/Python/2.7/site-packages/distribute-0.6.14-py2.7.egg/pkg_resources.py", line 552, in resolve
raise DistributionNotFound(req)
pkg_resources.DistributionNotFound: pip==9.0.1

故事

参考:Mac OS X 上如何切换默认的 Python 版本?

因为 mac 上自带的python 使用pip 安装失败, 是因为 SIP 对目录权限的限制,所以我自己安装python-2.7.13使用brew。
我之前一直 使用python-2.7.10, 将模块几乎都安装在 /Library/Python/2.7/site-packages/这里。

Bug

自从 有一次要升级frida 要安装frida 10.0.6, 安装新版本之前是可以使用但是pip 有下面bug。

1
2
3
4
5
6
7
8
9
10
11
➜ Reverse pip
Traceback (most recent call last):
File "/usr/local/bin/pip", line 6, in <module>
from pkg_resources import load_entry_point
File "/Library/Python/2.7/site-packages/distribute-0.6.14-py2.7.egg/pkg_resources.py", line 2671, in <module>
working_set.require(__requires__)
File "/Library/Python/2.7/site-packages/distribute-0.6.14-py2.7.egg/pkg_resources.py", line 654, in require
needed = self.resolve(parse_requirements(requirements))
File "/Library/Python/2.7/site-packages/distribute-0.6.14-py2.7.egg/pkg_resources.py", line 552, in resolve
raise DistributionNotFound(req)
pkg_resources.DistributionNotFound: pip==9.0.1
1
2
* pypi 下载 egg
* sudo easy_install xx.egg

下载frida10.0.6 的egg 文件,使用easy_install 安装以后,frida 也出现了 类似pip 的bug.
此时 将frida-10.0.6 默认安装在了 /usr/local/lib 目录,是因为我使用的 easy_install 在/usr/local/bin 目录。

1
2
3
4
5
6
7
8
9
➜ Reverse frida
Traceback (most recent call last):
File "/usr/local/bin/frida", line 6, in <module>
from pkg_resources import load_entry_point
File "/Library/Python/2.7/site-packages/distribute-0.6.14-py2.7.egg/pkg_resources.py", line 2675, in <module>
parse_requirements(__requires__), Environment()
File "/Library/Python/2.7/site-packages/distribute-0.6.14-py2.7.egg/pkg_resources.py", line 552, in resolve
raise DistributionNotFound(req)
pkg_resources.DistributionNotFound: frida==10.0.6

解决办法

参考 brew 的issue

按照文章中所说出现bug的原因是 老版本的pip 还在pip的启动脚本。我查看了 /usr/local/bin/pip

1
2
3
4
5
```
所以我将`/usr/local/lib/python2.7/site-packages/frida-10.0.6-py2.7-macosx-10.12-x86_64.egg` 文件移动到了 `/Library/Python/2.7/site-packages` 目录下。 其实 只要不在 `/usr/local/lib` 目录下即可以。
感觉是因为 python 环境变量 `echo $PYTHONPATH` 中没有包含 `/usr/local/lib` , 但是 我测试将 `/usr/local/lib/python2.7/site-packages/frida-10.0.6-py2.7-macosx-10.12-x86_64.egg` 放到其他不在 `$PYTHONPATH` 列表中的目录也可以工作了。 所以我现在 不确定 将egg 移走原因。

.:/usr/lib/python2.7:/Library/Python/2.7/site-packages:/usr/lib/python2.7/lib-dynload:/usr/lib/python2.7/lib-tk:/usr/lib/python2.7/site-packages:/usr/lib/python2.7/plat-darwin:/usr/lib/python2.7/plat-mac:/Users/xxx/.python/2.7.10/site-packages/:/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python:/Users/xxx/.pylib/

1
2
可以继续玩耍了。

➜ Reverse pip –version
pip 9.0.1 from /Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg (python 2.7)

➜ Reverse frida –version
10.0.6
```

拓展

为Mac 设置Python多版本开发环境 这篇文章 里的 pyenv 我已经使用brew 安装, 看了 作者的介绍,我觉得适合我 测试一些工具。稍后尝试。。。