【问题标题】:Modules are installed using pip on OSX but not found when importing在 OSX 上使用 pip 安装模块,但在导入时找不到
【发布时间】:2016-09-17 10:03:59
【问题描述】:

我使用 pip 成功安装了不同的模块,它们显示在

pip list

如:

beautifulsoup4 (4.4.1)
requests (2.10.0)
Scrapy (1.1.0)

从终端

但是,每当我尝试导入它时

import beautifulsoup4 / import bs4import Scrapyimport requests

显示以下错误:

$ python
Python 2.7.5 (default, Mar  9 2014, 22:15:05) 
[GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import requests
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named requests

更新:如果我在正确的站点包目录中启动 python

$ pwd
/usr/local/lib/python2.7/site-packages
$ python
Python 2.7.5 (default, Mar  9 2014, 22:15:05)
>>> import requests
>>> import bs4
>>> import scrapy

然后就可以了。如果直接在终端上写入,这将解决问题。但是,我不知道如何使它在 file.py 中工作,这将是正常使用。

据我所知,我只安装了 Python2.7。

来自文件.py

如果我有一个 file.py 保存在某个本地文件夹中。例如,这包含

import requests
from bs4 import BeautifulSoup

当我尝试时

python file.py

我得到同样的错误。

方法

列表中的任何其他模块也是如此。 我认为 pip 将它们安装在 Python 未读取的目录中,但根据我的阅读,它是正确的。

它们都安装在这里:

/usr/local/lib/python2.7/site-packages

Padraic Cunningham 要求的输出:

$ which -a pip
/usr/local/bin/pip
$ which -a python
/usr/bin/python
/usr/local/bin/python

leovp 请求的输出:

$ pip -V
pip 8.1.2 from /usr/local/lib/python2.7/site-packages (python 2.7)

已检查线程

我已经检查了以下线程,但不幸的是它们并没有帮助我解决问题:

你有什么想法吗?

【问题讨论】:

  • 你肯定没有使用pip安装的解释器,添加which -a pipwhich -a python的输出
  • pip -V 显示什么?您是否有可能同时安装了 Python 2 和 Python 3?
  • 好的,现在用/usr/local/bin/python 启动一个shell 并尝试导入。
  • @PadraicCunningham,这行得通。我应该以某种方式在我的 python.py 文件中添加它吗?
  • 最简单的解决方案是下载 get-pip.py 并使用 /usr/bin/python get-pip.py bootstrap.pypa.io/get-pip.py 安装它

标签: python macos python-2.7 import module


【解决方案1】:

这是有效的答案,这基本上是问题的 cmets 中已解释的内容。但是,我认为将其解释为清晰且结构合理的答案会很有用。

正如强调的那样,问题是我没有使用 pip 正在为其安装的解释器。 命令which 显示了 pip 安装模块的位置:

$ which -a pip
/usr/local/bin/pip

以及不同python版本的位置:

$ which -a python
/usr/bin/python
/usr/local/bin/python

也就是说,我的系统/默认python是

/usr/bin/python

当 pip 安装时

/usr/local/bin/python

因此,当我刚刚输入 python 时,我无法导入我安装的任何东西,因为 /usr/bin/python 解释器是启动的。

解决方案

再次安装 pip,指定要安装的模块的目的地。这必须是系统/默认 python 的目的地。

这分两步完成:

  1. bootstrap.pypa.io/get-pip.py 下载get-pip.py。 (您可能需要使用已弃用的 Python 2:bootstrap.pypa.io/2.7/get-pip.py

  2. 使用以下命令安装它

    sudo /usr/bin/python get-pip.py

请注意,如果没有sudo,我会遇到错误并且无法安装 pip。

【讨论】:

  • 嗨,我也遇到了类似的问题。在我的例子中,在 Mac OS High Sierra 中,which -a pip 产生 /usr/local/bin/pipwhich -a python 产生 /usr/bin/python。我尝试了相同的程序,但我失败了。我将 get-pip.py 下载到我的桌​​面并运行 sudo /usr/bin/python ~/Desktop/get-pip.py。程序运行良好,但是当我运行which -a pip 时,我仍然只得到/usr/local/bin/pip
  • 我遇到了同样的问题。就我而言,它在安装前后也位于/usr/local/bin/pip。所以你可以说什么都没有改变,但事实上,有些东西改变了,因为现在它正在工作。我不需要sudo。我正在运行 Mojave。
【解决方案2】:

我刚刚解决了一个类似的问题。

为了提供一些背景知识,我通过执行brew install python 来安装piphomebrew。执行此命令的一个缺点是,它会同时安装 python2 和 python3(在某些情况下可能不是缺点),然后

pip install scrapy

但是当我尝试import scrapy时,它抱怨ImportError: No module named scrapy


我的解决方案: 运行brew doctor,它应该会报告你一个链接坏了,它要求你运行brew link python,你可能会遇到一些错误,但是按照提示的建议继续前进,在成功执行brew link python之后,一切都应该工作了。

【讨论】:

    【解决方案3】:

    由于您的问题可能是由于各种原因引起的,我在这里列出了其中的一些:

    您要查找的链接:https://pythonhosted.org/setuptools/setuptools.html#development-mode

    • 如果您安装了两个版本的 python,也可能会发生这种情况。如果您访问的 pip 是一个版本,而使用的 python 解释器是另一个版本。

    所以请确保您使用的是相同版本的 python 来安装和使用该包。

    您可以使用别名来解决此问题,

    首先,设置一个shell别名:

    alias python=/usr/local/bin/python3
    

    然后,在提示符下键入它,或将其放入您的 ~/.bashrc 以便无论何时从终端打开 python,都会打开正确的版本。

    • 如果上述两种方法都不适合您,请检查:

    ImportError No module namedthis

    【讨论】:

    • 你是对的 Ani Menon,安装了两个版本的 python。我在回答中解释了我是如何着手解决问题的。
    • 很好,您也可以使用别名来修复它。如果您的两个 python 版本都分配了不同的别名,则可以根据需要轻松使用两者。 (我不知道为什么有人对答案投了反对票!)
    • 有趣,您能详细介绍一下别名吗?
    • 使用alias命令;答案已编辑。同样,您也可以给pip 起别名。
    • 做一个brew reinstall python2。它可能会抱怨它无法删除某些文件。如果是这种情况,请确保您的/usr/local/lib/python2.7/site-packages 中的所有文件都归您所有(即cd /usr/local/lib/python2.7/site-packages ; sudo chown -R &lt;YOURLOGIN&gt; *)。然后重试brew reinstall python2pip install --upgrade pip setuptools,最后使用pip安装你的库。 pip install X.
    【解决方案4】:

    我添加这个以防它帮助其他人。对我来说,问题是我正在运行 Anaconda 并且 pip3 正在安装到与 Anaconda 链接不同的目录。要解决此问题,请运行 conda deactivate。您可以稍后使用conda activate 重新激活

    【讨论】:

    • 对我来说,它通常只是 pip,它会安装但无法导入。需要使用pip3 install &lt;module name&gt; 而不是pip install &lt;module name&gt;,然后它才可用于Python 3。这在Mac 上只有Python 2 可用或同时安装了Python 2 和Python 3。
    【解决方案5】:

    我可以通过运行来解决这个问题:

    $ brew doctor 
    

    得到以下结果:

    考虑设置您的 PATH,使 /usr/local/bin 出现在 /usr/bin 之前。

    这是一个单行:

    echo 'export PATH="/usr/local/bin:$PATH"' >> ~/.bash_profile
    

    运行单行程序后,我可以从/usr/local/bin 访问已安装的包

    【讨论】:

      【解决方案6】:

      在终端运行brew doctor 它应该给你一个警告,上面写着:

      Warning: The following directories do not exist:
      /usr/local/sbin
      
      You should create these directories and change their ownership to your account.
        sudo mkdir -p /usr/local/sbin
        sudo chown -R $(whoami) /usr/local/sbin
      

      在终端中输入sudo mkdir -p /usr/local/sbin 并回车 然后输入sudo chown -R $(whoami) /usr/local/sbin 然后运行 ​​python 并尝试再次导入您的模块。

      【讨论】:

        猜你喜欢
        • 2019-10-21
        • 2019-09-26
        • 1970-01-01
        • 2019-02-12
        • 1970-01-01
        • 2018-06-13
        • 2014-01-31
        • 2012-10-09
        • 2017-03-24
        相关资源
        最近更新 更多