Macports无法识别pip安装的包
直到今天,我一直在用macports版本的python27
,通过macports来安装python包。今天,我需要一些在macports上找不到的包;于是我了解到pip,并在那找到了这些包。不过,通过pip安装这些包后,我发现pip和macports互相看不到对方安装的内容。所以,为了保持一致性,我决定卸载所有macports的包,然后通过macports重新安装python27
和py27-pip
,接着再通过pip安装我的所有python包。
这样做是没问题的,但因为macports不知道我通过pip安装的python包,当我想安装其他依赖python的东西(比如,inkscape)时,就遇到了麻烦:macports试图安装它自己版本的,比如py27-numpy
(这个已经是通过pip安装的),然后安装失败,因为它提示“已经存在且不属于注册的端口”。
有没有什么办法可以让pip和macports一起用,并且让macports知道它可能需要的python包已经安装好了?
2 个回答
这是个比较老的问题,但我碰到了,就来分享一下:
- 我通过macports自己安装的Python相关包只有python和pip。
- 用pip来安装Python包,但不要用sudo!这也是使用pip的推荐方式。
- 这样安装的包会放在 ~/Library/Python/3.9/lib/python/site-packages 这个地方。
- 如果有macports安装的包需要用到Python,那就让它自己处理(用sudo,这也是运行macports的推荐方式)。
- Macports会把Python包安装在 /opt/local/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages 这个位置,这样就避免了冲突。
我安装的macports包很少需要安装macports管理的py39-whatever包,但偶尔会有。无论如何,这样做就不会有冲突。
总的来说,如果有特定需求的项目,最好还是使用virtualenv,但至少这种方式可以把东西安装到你的主环境里。
解决办法是:不要用Macports来安装Python的包。
Macports是一个通用的包管理工具,它会把安装的包记录在自己的数据库里。
Pip是专门用来管理Python包的工具,所以如果你想安装Python的包,就应该用合适的管理工具。Pip没有自己的数据库来记录安装的内容,它只是检查Python的路径,看看包是否存在(这正是你想要的)。
迟早你会用到Virtualenv,而在里面你也需要用pip来安装包,所以最好在任何地方都使用pip。