Pip Install 没有安装到正确的目录?

Posted

技术标签:

【中文标题】Pip Install 没有安装到正确的目录?【英文标题】:Pip Install not installing into correct directory? 【发布时间】:2014-10-25 19:12:57 【问题描述】:

我似乎无法正确使用 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/

【问题讨论】:

你需要运行 pip installed 来安装你想要的 python。即:您可能安装了超过 1 个 python...检查您是否正在运行作为框架或其他框架安装的 python,并使用您想要的 pip,它应该在您安装的“bin”目录中想要。 如何检查是否将 python 作为框架运行? "type python" 为您提供运行 python 的位置。然后键入“ls -l ”以检查它是否是指向另一个位置的链接。您可能希望在 /Library/Frameworks/Python.framework/Versions/2.7/bin/python 中运行 谢谢——你是绝对正确的,因为我从“type python”中得到了“/usr/local/bin/python”。我将如何删除那个或至少让 sudo pip install 始终进入“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/”?换句话说,我要如何运行 pip installed 来安装我想要的 python 安装? 你可以创建一个指向你想要的python的链接。即: sudo ln -s /usr/bin/python /Library/Frameworks/Python.framework/Versions/2.7/bin/python 但是,我建议你从框架运行 pip,它可能在路径 /Library/Frameworks/ Python.framework/Versions/2.7/bin/pip 所以输入 /Library/Frameworks/Python.framework/Versions/2.7/bin/pip install 【参考方案1】:

从 cmets 到原始问题,您似乎安装了多个版本的 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 安装它)。最后,使用它。你现在应该没事了。

【讨论】:

感谢您的建议!不过,我对您的解决方案有疑问。我尝试输入:export PATH=/Library/Frameworks/Python.framework/Versions/2.7/bin/python:PATH。这不起作用。我尝试输入 export PATH=/Library/Frameworks/Python.framework/Versions/2.7/bin/python:/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages /,这不起作用。我也试过 export PATH=/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/ 。 嗨,克里斯。首先 - 我的原始回复中有一个类型 - 我错过了 export PATH=/Library/Frameworks/Python.framework/Versions/2.7/bin/python:$PATH 中的“$”符号。第二 - 当你说它不起作用时 - 你是什么意思?能具体一点吗? 请注意,只运行“python -m pip”会更容易,以确保您使用正确版本的 Python 和 pip。【参考方案2】:

这在 Windows 上对我有用。原因是多个 python 安装

    使用正确的 python 更新路径 使用python -m pip uninstall pip setuptools卸载pip 重新启动 Windows 在重新启动之前无法工作

【讨论】:

【参考方案3】:

Virtualenv是你的朋友

即使您想在主安装中添加一个包,最好还是先在虚拟环境中进行,以确保与其他包的兼容性。但是,如果您熟悉 virtualenv,您可能会发现实际上没有理由在基本安装中安装任何东西。

【讨论】:

【参考方案4】:

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 来提供所需的 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 应该执行的东西。实际使用它的最佳方式是安装本地的、非 root 的 python 版本。您只需要通过设置正确的环境变量(例如 Linux 上的 PATH)来确保默认使用它,然后使用该 python 版本安装 pip 而不使用 sudo

更好的方法是从根安装设置virtualenvs。

这样,您可以在没有 root 权限的情况下安装/更新任何您想要的东西,而不必再为sudo pip 不起作用的原因而烦恼。您还将避免为 Pypi 上的任何内容提供 root 权限,这将保证您不会将系统库与您自己的库混合。

【讨论】:

which python 为我返回:/opt/local/bin/python(使用macports 安装)这是我想要使用的版本。 which pip 返回/usr/local/bin/pip,它与默认的python 相关联。鉴于我应该按照手册 (docs.python-guide.org/en/latest/dev/virtualenvs) 使用 pip,如何使用 macports-python 安装 virtualenv【参考方案5】:

我完全同意这些人的观点,最好使用 virtualenv,这样您就可以为每个项目设置自定义环境。它非常适合维护,因为它就像每个项目的不同世界,并且您所做的应用程序的每次更新都不会干扰其他项目。

Here you can find a nutshell of virtualenv 与安装和第一步有关。

【讨论】:

嗯,这个帖子是两年前的。这个链接也很有用simononsoftware.com/virtualenv-tutorial【参考方案6】:
    在https://pypi.python.org/pypi/pip (tar) 下载 pip 解压 tar 文件 cd 到文件目录 sudo python2.7 setup.py install

【讨论】:

【参考方案7】:

你可以改变 shebang 线。我一直在新系统上这样做。

如果您希望 pip 安装到当前安装的 Python 版本,只需将 shebang 行更新为正确版本的 pythons 路径。

例如,将 pip(不是 pip3)更改为安装到 Python 3:

#!/usr/bin/python

收件人:

#!/usr/bin/python3

您使用pip 安装的任何模块都应该安装到 Python 而不是 Python。

或者你可以改变路径。

【讨论】:

【参考方案8】:

我试过了,它对我有用,

curl -O  https://files.pythonhosted.org/packages/c0/4d/d2cd1171f93245131686b67d905f38cab53bf0edc3fd1a06b9c667c9d046/boto3-1.14.29.tar.gz

tar -zxvf boto3-1.14.29.tar.gz

cd boto3-1.14.29/

用你需要的python解释器替换X,我的是python3

sudo pythonX setup.py install

【讨论】:

【参考方案9】:

确保您的 pip 版本与您的 python 版本匹配。

获取您的 python 版本使用:

python -V

然后安装正确的 pip。在这种情况下,您可能已经安装了尝试使用:

pip-2.5 安装 ...

pip-2.7 安装 ...

或者对于那些使用 macports 的人,请确保您的版本匹配使用。

端口选择--list pip

然后更改为您正在使用的相同 python 版本。

sudo 端口选择 --set pip pip27

希望这会有所帮助。它对我有用。

【讨论】:

【参考方案10】:

你应该卸载已有的python,然后下载新版本。

【讨论】:

以上是关于Pip Install 没有安装到正确的目录?的主要内容,如果未能解决你的问题,请参考以下文章

python中怎么安装pip

ubuntu不能安装pip unable to install pip in unbuntu

pip install出错,pip版本不匹配

当pip install不能正确安装的时候,try easy_install

pip install -r 要求到 Colab 中的特定目录

pip install pickle 不工作 - 没有这样的文件或目录