Pip安装未安装到正确目录?
我似乎无法正确使用sudo pip install,这样它就不能安装到以下目录:
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/
这样我才能用python导入这个模块。
我已经运行了:
sudo pip install scikit-learn --upgrade
结果
Requirement already up-to-date: scikit-learn in /usr/local/lib/python2.7/site-packages
Cleaning up...
但是,它并没有安装到正确的目录。
我该如何让sudo pip install安装到正确的目录呢?
另外,我还尝试过:
sudo pip install Scrappy
我收到了以下信息:
new-host-2:site-packages Chris$ sudo pip install Scrapy
Password:
Requirement already satisfied (use --upgrade to upgrade): Scrapy in /usr/local/lib/python2.7/site-packages
Requirement already satisfied (use --upgrade to upgrade): Twisted>=10.0.0 in /usr/local/lib/python2.7/site-packages (from Scrapy)
Requirement already satisfied (use --upgrade to upgrade): w3lib>=1.8.0 in /usr/local/lib/python2.7/site-packages (from Scrapy)
Requirement already satisfied (use --upgrade to upgrade): queuelib in /usr/local/lib/python2.7/site-packages (from Scrapy)
Requirement already satisfied (use --upgrade to upgrade): lxml in /usr/local/lib/python2.7/site-packages (from Scrapy)
Requirement already satisfied (use --upgrade to upgrade): pyOpenSSL in /usr/local/lib/python2.7/site-packages (from Scrapy)
Requirement already satisfied (use --upgrade to upgrade): cssselect>=0.9 in /usr/local/lib/python2.7/site-packages (from Scrapy)
Requirement already satisfied (use --upgrade to upgrade): six>=1.5.2 in /usr/local/lib/python2.7/site-packages (from Scrapy)
Requirement already satisfied (use --upgrade to upgrade): zope.interface>=3.6.0 in /usr/local/lib/python2.7/site-packages (from Twisted>=10.0.0->Scrapy)
Requirement already satisfied (use --upgrade to upgrade): cryptography>=0.2.1 in /usr/local/lib/python2.7/site-packages (from pyOpenSSL->Scrapy)
Requirement already satisfied (use --upgrade to upgrade): setuptools in /usr/local/lib/python2.7/site-packages (from zope.interface>=3.6.0->Twisted>=10.0.0->Scrapy)
Requirement already satisfied (use --upgrade to upgrade): cffi>=0.8 in /usr/local/lib/python2.7/site-packages (from cryptography>=0.2.1->pyOpenSSL->Scrapy)
Requirement already satisfied (use --upgrade to upgrade): pycparser in /usr/local/lib/python2.7/site-packages (from cffi>=0.8->cryptography>=0.2.1->pyOpenSSL->Scrapy)
这两个例子都表明它已经安装了,但并不正确。例如,当我在python中运行以下导入时:
import scrapy
---------------------------------------------------------------------------
ImportError Traceback (most recent call last)
<ipython-input-6-51c73a18167b> in <module>()
----> 1 import scrapy
ImportError: No module named scrapy
我尝试过以下操作:
sudo ln -s /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/
11 个回答
我完全同意大家的看法,使用virtualenv会更好,这样你可以为每个项目设置一个独立的环境。这样做非常适合维护,因为每个项目就像是一个不同的世界,你对一个应用的更新不会影响到其他项目。
1 - 可能有效的方法
pip
其实是一个Python脚本。
在Linux系统上,它默认包含以下内容:
#!/usr/bin/python
# EASY-INSTALL-ENTRY-SCRIPT: 'pip==1.5.6','console_scripts','pip'
__requires__ = 'pip==1.5.6'
import sys
from pkg_resources import load_entry_point
if __name__ == '__main__':
sys.exit(
load_entry_point('pip==1.5.6', 'console_scripts', 'pip')()
)
所以如果你在MacOS上也看到这些,pip
就会一直使用/usr/bin/python
。
不过这只是默认设置。你可以通过编辑这个文件或者明确指定你想要的Python版本来进行更改。
如果你输入which python
后返回/usr/bin/python
,那说明你在安装自己的版本时出了问题。如果返回的是/Library/Frameworks/Python.framework/Versions/2.7/bin/python
,你可以直接调用:
sudo python `which pip` install scikit-learn --upgrade
不过,这样做可能不会成功。原因是sudo
会重置你所有的环境变量。为了让它正常工作,最简单的方法是使用:
sudo -E pip install scikit-learn --upgrade
或者
sudo -E python `which pip` install scikit-learn --upgrade
这取决于你的设置。
2 - 你应该怎么做
pip
并不是为了让root
用户来执行的。使用它的最佳方式是安装一个本地的、非根用户的Python版本。你只需要确保通过设置正确的环境变量(比如在Linux上设置PATH
)来默认使用这个版本,然后用这个Python版本安装pip
,而不需要使用sudo
。
更好的方法是从你的根安装中设置virtualenv
。
这样,你就可以在没有根权限的情况下安装或更新任何你想要的东西,再也不用担心为什么sudo pip
不工作了。你还可以避免给Pypi上的任何东西提供根权限,这样就能确保你的系统库和你自己的库不会混在一起。
Virtualenv 是你的好帮手
即使你想在主安装中添加一个软件包,最好还是先在虚拟环境中进行,这样可以确保它与你其他软件包的兼容性。不过,如果你熟悉了virtualenv,你会发现其实没有必要在主安装中安装任何东西。
这是我在Windows上成功的步骤。问题的原因是有多个Python版本安装在电脑上。
- 更新路径,确保使用正确的Python版本。
- 用这个命令卸载pip:
python -m pip uninstall pip setuptools
- 重启Windows 重启之前是没法解决的
从原问题的评论来看,你似乎安装了多个版本的Python,而pip可能指向了错误的版本。
首先,要知道你正在使用哪个版本的Python,只需输入 which python
。你应该会看到:
which python
/Library/Frameworks/Python.framework/Versions/2.7/bin/python
如果你指向的是正确的Python版本,或者:
which python
/usr/bin/python
如果你指向的是“错误”的版本。为了让pip指向正确的版本,你需要先更改路径:
export PATH=/Library/Frameworks/Python.framework/Versions/2.7/bin/python:${PATH}
现在输入'which python'应该能得到正确的结果。接下来,安装pip(如果这个Python版本还没有安装pip的话)。最后,使用它。这样你就没问题了。