【问题标题】:Unable to import a module that is definitely installed无法导入确定安装的模块
【发布时间】:2012-12-27 01:39:36
【问题描述】:

安装mechanize后,好像无法导入。

我已尝试从 pip、easy_install 和通过此 repo 中的 python setup.py install 安装:https://github.com/abielr/mechanize。所有这些都无济于事,因为每次我进入我的 Python 交互我都会得到:

Python 2.7.3 (default, Aug  1 2012, 05:14:39) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import mechanize
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named mechanize
>>> 

我之前运行的安装报告它们已成功完成,因此我希望导入能够正常工作。什么可能导致此错误?

【问题讨论】:

  • 你确定它没有安装到 2.6(这是 ubuntu 上的默认设置吗?(至少它在我的 debian 上)
  • 好吧,easy install 的输出显示它已安装到 2.7:Installed /usr/local/lib/python2.7/dist-packages/mechanize-0.2.6.dev_20130112-py2.7.egg
  • 我已经尝试了各种方式——setup.py、easy_install、pip——来自 pypi 和 repo,但我不能让它失败。您能否检查sys.path 以查看您是否在寻找正确的位置,ls -laR /usr/local/lib/python2.7/dist-packages/mech* 以检查权限问题,并查看imp.find_module("mechanize") 以区分找不到和无法生存-导入错误?
  • @DSM 将此信息添加到原始帖子
  • @RoybertSoylend:谢谢。不幸的是,这排除了我正在考虑的两种理论。 :-/

标签: python mechanize python-module


【解决方案1】:

就我而言,这是权限问题。该软件包以某种方式仅以root rw权限安装,其他用户无法对其进行rw!

【讨论】:

  • 这发生在我身上,只是运行sudo pip install ...。简单修复:sudo chmod -R ugo+rX /lib/python2.7/site-packages/
  • 我遇到过很多次,我想我才发现原因:umask是通过sudo传递的,所以如果你的个人umask很紧,你使用sudo进行安装,文件和目录会被过度限制。如果您先简单地 su 然后从完整的 root shell 进行安装,则生成的安装是可用的(至少对我来说是这样)。这适用于 pip,但也可能适用于 apt-get。如果其他人确认了这个原因,可能要相应地修改答案?
  • 添加到 jozxyqk 评论中:通过 $ pip show 确保您获得了正确的目录
  • 对我来说也一样。我在 Mac 上使用 Python 3.6,所以 sudo chmod 777 /usr/local/lib/python3.6/site-packages 成功了
  • sudo 777 总是很糟糕的主意
【解决方案2】:

我遇到了同样的问题:带有 import colorama 的脚本正在抛出并且 ImportError,但 sudo pip install colorama 告诉我“包已安装”。

我的解决方法:运行 pip 无需 sudopip install colorama。然后 pip 同意它需要安装,安装它,然后我的脚本运行。

我的环境是 Ubuntu 14.04 32 位;我想我在激活我的 virtualenv 之前和之后都看到了这个。

更新:更好的是,使用python -m pip install &lt;package&gt;。这样做的好处是,由于您正在执行您想要包的特定版本的 python,pip 将明确地将包安装到“正确的”python 中。同样,不要在这种情况下使用 sudo...然后您将包放在正确的位置,但可能具有(不需要的)root 权限。

【讨论】:

  • 或者你可以使用 sudo 的 -H 标志
  • 谢谢,python -m pip install &lt;package&gt; 显示我的问题。
【解决方案3】:

这是python路径问题。

在我的情况下,我安装了 python:

/Library/Frameworks/Python.framework/Versions/2.6/bin/python,

并且python2.6中没有site-packages目录。

我通过pip安装的包(SOAPpy)位于

/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/

并且站点包不在 python 路径中,我所做的只是将站点包永久添加到 PYTHONPATH。

  1. 打开终端

  2. 键入 open .bash_profile

  3. 在弹出的文本文件最后加上这一行:

    export PYTHONPATH=$PYTHONPATH:/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/
    
  4. 保存文件,重启终端,大功告成

【讨论】:

  • 这对我有用,让 Jenkins 使用 selenium python。
  • 当我的bash脚本调用我的芹菜脚本时,这对我通过主管运行芹菜很有用;芹菜脚本无法在我的 pip 中导入已安装的模块。非常感谢。
  • 注意:导入错误的另一种可能性是您的计算机中安装了多个版本的 Python。例如,一个来自系统的 Python,另一个来自 Miniconda 或 Anaconda。因此,请务必始终使用正确的对应“pip”。
【解决方案4】:

Python 导入机制确实有效,所以:

  1. 您的 PYTHONPATH 错误,
  2. 您的库未安装在您认为的位置
  3. 您有另一个同名的库来屏蔽这个库

【讨论】:

  • 这种情况下不能是选项3;这不会引发 ImportError。
  • 也许是 2 个?我只是不知道为什么它会为这个库安装在错误的位置,而大多数其他库都很好。
  • 选项 4:你的 PYTHONPATH 是正确的,你的库在你想要的地方,你没有一个库来掩盖这个......但是因为你使用了 sudo pip install 它安装了 root privs,并且在导入时,由于缺少读写访问权限,某些事情正在轰炸。
  • 不完全正确,@MartijnPieters:如果有“from import ”形式的导入,并且如果阻碍包没有“foo”,那么你会得到选项 3 的导入错误。
  • @DanH 当然,但这不是 OP 使用的形式。
【解决方案5】:

我能够通过综合方法纠正这个问题。首先,我听从 Chris 的建议,打开命令行并输入“pip show packagename” 这提供了已安装包的位置。

接下来,我打开 python 并输入“import sys”,然后输入“sys.path”以显示我的 python 搜索我导入的任何包的位置。唉,第一步中显示的位置不在列表中。

最后一步,我输入了 'sys.path.append('package_location_seen_in_step_1')。您可以选择重复第二步以查看该位置现在是否在列表中。

测试步骤,尝试再次导入包......它工作。

缺点?是临时的,每次都需要添加到列表中。

【讨论】:

    【解决方案6】:

    我一直在用头撞显示器,直到一位年轻的实习生告诉我秘诀是“python setup.py install”在模块目录中。

    出于某种原因,从那里运行设置使其正常工作。

    要清楚,如果您的模块名称是“foo”:

    [burnc7 (2016-06-21 15:28:49) git]# ls -l
    total 1
    drwxr-xr-x 7 root root  118 Jun 21 15:22 foo
    [burnc7 (2016-06-21 15:28:51) git]# cd foo
    [burnc7 (2016-06-21 15:28:53) foo]# ls -l
    total 2
    drwxr-xr-x 2 root root   93 Jun 21 15:23 foo
    -rw-r--r-- 1 root root  416 May 31 12:26 setup.py
    [burnc7 (2016-06-21 15:28:54) foo]# python setup.py install
    <--snip-->
    

    如果您尝试从任何其他目录中调用 setup.py 的路径来运行它,那么您最终会安装失败。

    不工作:

    python /root/foo/setup.py install
    

    有效:

    cd /root/foo
    python setup.py install
    

    【讨论】:

      【解决方案7】:

      我在尝试使用通过sudo pip install keyring 安装的密钥环时遇到了这个问题。正如其他答案中提到的,在我的情况下这是一个权限问题。

      什么对我有用:

      1. 已卸载密钥环:
      • sudo pip uninstall keyring
      1. 我使用了 sudo 的 -H 选项并重新安装了密钥环:
      • sudo -H pip install keyring

      【讨论】:

        【解决方案8】:

        在 PyCharm 中,我通过更改项目解释器路径解决了这个问题。

        File -&gt; Settings -&gt; Project -&gt; Project Interpreter

        之后可能需要File -&gt; Invalidate Caches…

        【讨论】:

        • 如果您使用 PyCharm,这里有一个快捷方式:只需 File -&gt; Settings -&gt; Project -&gt; Project Interpreter -&gt; Available Packages 并在此处搜索您想要的包,然后单击安装。
        【解决方案9】:

        我的 PYTHONPATH 无法正常工作。我意识到添加export 解决了这个问题:

        (确实有效)

        export PYTHONPATH=$PYTHONPATH:~/test/site-packages
        

        对比

        (没用)

        PYTHONPATH=$PYTHONPATH:~/test/site-packages
        

        【讨论】:

          【解决方案10】:

          在我的例子中,我运行了 pip install Django==1.11,它不会从 python 解释器导入。

          浏览 pip 的命令,我发现 pip show 看起来像这样:

          > pip show Django
          Name: Django
          Version: 1.11
          ...
          Location: /usr/lib/python3.4/site-packages
          ...
          

          请注意该位置显示“3.4”。我发现python-command 链接到python2.7

          /usr/bin> ls -l python
          lrwxrwxrwx 1 root root 9 Mar 14 15:48 python -> python2.7
          

          就在旁边,我找到了一个名为python3 的链接,所以我使用了它。您也可以将链接更改为python3.4。这样也能解决问题。

          【讨论】:

            【解决方案11】:

            在我的情况下,模块中缺少 init.py 文件是一个问题,我想在 Python 2.7 环境中导入该文件。

            Python 3.3+ 具有隐式命名空间包,允许它在没有 init.py 文件的情况下创建包。

            【讨论】:

              【解决方案12】:

              对我有用的是:

              python -m pip install -user {package name}
              

              该命令不需要 sudo。这是在 OSX Mojave 上测试的。

              【讨论】:

                【解决方案13】:

                如果提到的其他答案对您不起作用,请尝试删除您的 pip 缓存并重新安装软件包。我的机器运行 Ubuntu14.04,它位于~/.cache/pip 下。删除这个文件夹对我有用。

                【讨论】:

                  【解决方案14】:

                  另外,请确保不要将pip3pip 混淆。我发现使用pip 安装的软件包不适用于python3,反之亦然。

                  【讨论】:

                    【解决方案15】:

                    也有这个问题.. 包安装在 Python 3.8.0 上,但 VS Code 使用旧版本 (3.4) 运行我的脚本

                    在终端中修复:

                    py.py

                    确保您在正确的 Python 版本上安装包

                    【讨论】:

                      【解决方案16】:

                      我通过 pip 安装了 colorama,但收到“ImportError: No module named colorama”

                      所以我用“find”搜索,找到了绝对路径并将其添加到脚本中,如下所示:

                      import sys
                      sys.path.append("/usr/local/lib/python3.8/dist-packages/")
                      import colorama 
                      

                      它奏效了。

                      【讨论】:

                        【解决方案17】:

                        此解决方案并不适用于所有人。仅适用于执行特定操作的一组特定新手(如我)。以上答案都不适合我。

                        那么是什么导致了问题: 以前我有一个项目,在根目录下设置了 venv。后来我创建了一个新用户,并决定将项目转移给这个用户。而不是只移动源文件并重新安装依赖项,我将整个项目连同 venv 文件夹一起移动到了新用户(因为我不知道这些问题)。之后,我安装的依赖项被添加到 global site-packages 而不是 venv 文件夹中的那个。所以在这个环境中运行的代码无法访问这些依赖项。

                        解决方案:刚刚删除了 venv 文件夹并重新创建了它。

                            $ deactivate
                            $ rm -rf venv
                            $ python3 -m venv venv
                            $ source venv/bin/activate
                            $ pip install -r requirements.txt
                        

                        【讨论】:

                          【解决方案18】:

                          当您通过easy_installpip 安装时,是否成功完成?什么是完整的输出?您使用的是哪个 python 安装?如果您要将模块安装到系统目录(如果您正在使用系统 python 安装,可能),您可能需要在安装命令之前使用sudo。您的问题中没有太多有用的信息可供参考,但一些可能会有所帮助的工具包括:

                          • echo $PYTHONPATH 和/或echo $PATH:导入模块时,Python 会在这些环境变量之一(目录列表,: 分隔)中搜索您想要的模块。导入问题通常是由于这些列表中缺少正确的目录

                          • which pythonwhich pipwhich easy_install:这些将告诉您每个可执行文件的位置。了解一下可能会有所帮助。

                          • 使用virtualenv,就像@JesseBriggs 建议的那样。它与pip 配合得非常好,可帮助您隔离和管理单独 Python 项目的模块和环境。

                          【讨论】:

                            【解决方案19】:

                            我遇到了这个确切的问题,但上面的答案都没有奏效。它让我发疯,直到我注意到 sys.path 在我从父项目导入后有所不同。原来,我使用 importlib 编写了一个小函数,以便导入不在项目层次结构中的文件。坏主意:我忘记了我做过这个。更糟糕的是,导入过程与 sys.path 混为一谈——然后就这样离开了。 非常坏主意。

                            解决方案是停止这种情况,只需将我需要导入的文件放入项目中即可。另一种方法是将文件放入自己的项目中,因为它需要不时重建,并且重建可能会或可能不会与主项目的重建重合。

                            【讨论】:

                              【解决方案20】:

                              我在尝试使用Python-Telegram-Bot 测试电报机器人的系统上安装了 2.7 和 3.5 时遇到了这个问题。

                              在使用 pip 和 pip3 安装后,无论是否使用 sudo,我都无法让它工作。我总是得到:

                              Traceback (most recent call last):
                                File "telegram.py", line 2, in <module>
                                  from telegram.ext import Updater
                                File "$USER/telegram.py", line 2, in <module>
                                  from telegram.ext import Updater
                              ImportError: No module named 'telegram.ext'; 'telegram' is not a package
                              

                              正确阅读错误消息告诉我 python 正在当前目录中查找telegram.py。没错,我有一个名为 telegram.py 的脚本,当我调用 import 时,它是由 python 加载的。

                              结论,在尝试导入时,请确保您当前的工作目录中没有任何 package.py。 (并彻底阅读错误信息)。

                              【讨论】:

                                【解决方案21】:

                                我在使用 Django 时遇到了类似的问题。就我而言,我可以从 Django shell 导入模块,但不能从导入模块的 .py 导入。
                                问题是我正在从安装模块的不同的虚拟环境运行 Django 服务器(因此,执行 .py)。

                                相反,shell 实例在正确的 virtualenv 中运行。因此,它为什么起作用。

                                【讨论】:

                                  【解决方案22】:

                                  这工作!!!

                                  当模块安装到旧版本的python或其他目录时,经常会发生这种情况,不用担心,因为解决方案很简单。 - 从安装模块的目录导入模块。 您可以通过首先导入 python sys 模块然后从安装模块的路径导入来做到这一点

                                  import sys
                                  sys.path.append("directory in which module is installed")
                                  
                                  import <module_name>
                                  

                                  【讨论】:

                                    【解决方案23】:

                                    解决方案中已经涵盖了大部分可能的情况,只是分享我的情况,我碰巧在一个环境中安装了一个包(例如X)并且我在另一个环境中导入了包(例如@ 987654322@)。因此,请始终确保从安装包的环境中导入包。

                                    【讨论】:

                                      【解决方案24】:

                                      对我来说,它确保模块的版本与我使用的 Python 版本保持一致。我在一个带有 Python 3.6 的盒子上构建了图像,然后注入到发生的 Docker 图像中安装了 3.7,然后当 Python 告诉我模块没有安装时敲了敲我的头......

                                      36m 用于 Python 3.6 bsonnumpy.cpython-36m-x86_64-linux-gnu.so

                                      37m 用于 Python 3.7 bsonnumpy.cpython-37m-x86_64-linux-gnu.so

                                      【讨论】:

                                      • pip install 与您使用的 Python 版本匹配的版本。你得到什么错误,python --version的输出是什么
                                      • python --version 给了我:Python 3.7.7,当我用 pip show librosa 来检查软件包的安装位置时;位置:/home/ec2-user/anaconda3/lib/python3.7/site-packages 这意味着包在正确的位置,但是当我导入包时:没有模块名称我正在使用 AWS Sagemaker env Pytorch_p36
                                      • 大概你想使用 pytorch_p37 ?
                                      • 没有pytorch_p37
                                      【解决方案25】:

                                      我知道这是一篇超级旧的帖子,但对我来说,我在安装 32 位 python 和 64 位 python 时遇到了问题。卸载 32 位 python 后,一切正常。

                                      【讨论】:

                                        【解决方案26】:

                                        我已经解决了我的问题,即相同的库在一个项目 (A) 中运行良好,但在另一个项目 (B) 中导入这些相同的库导致错误。我在 Windows 操作系统中使用 Pycharm 作为 IDE。 因此,在尝试了许多潜在的解决方案并未能解决问题后,我做了这两件事(删除了“Venv”文件夹,并重新配置了解释器):

                                        1-在项目(B)中,有一个名为(“venv”)的文件夹,位于外部库/中。我删除了那个文件夹。

                                        2-Step 1(删除“venv”文件夹)导致 Python 解释器配置出错,并且 屏幕顶部显示一条消息“选择了无效的 python 解释器 对于项目”和“配置 python 解释器”,选择该链接并打开一个 新窗户。在“项目解释器”下拉列表中,有一条红色线 显示以前的无效解释器。现在,打开此列表并选择 Python 解释器(在我的例子中,它是 Python 3.7)。按底部的“应用”和“确定” 很好。

                                        注意:这可能是我的项目(B)的虚拟环境无法识别已安装和工作的库的问题。

                                        【讨论】:

                                          【解决方案27】:

                                          如果您使用的是虚拟环境,请使用 pipenv install &lt;module name&gt; 而不是 pip install &lt;module name&gt;

                                          为我工作。

                                          【讨论】:

                                          • pipenv 未找到
                                          【解决方案28】:

                                          正如一位朋友今天为我所做的,这对我有帮助(我使用的是 Windows):

                                          按“设置”->“项目”->“项目解释器”。在右侧的窗口中,左侧有一行标题为“Project Interpreter”。单击此行,它将打开几个额外的行。

                                          现在按“显示全部”行。将打开一个窗口。 在此窗口中,按右上角的小“+”号。

                                          将打开一个新窗口。左边有 4 个选项卡,按最上面的一个,上面写着“Virtualenv Environment”。 现在,在右侧的窗口中,标记“现有环境”选项。 “解释器”行将变得清晰可见。按行右侧的“...”按钮。

                                          现在,将打开一个浏览窗口。浏览到您在其中安装 Python 本身的目录。不是 PyCharm 的那个。到达那里后,选择“python.exe”文件并按 OK(窗口将消失)。

                                          再次按 OK(此窗口也会消失)。

                                          现在在此窗口中确保您创建的新行已标记,然后再次按 OK。

                                          现在,所有已安装的包都应该在项目解释器中可见,并且可以被您的程序读取。

                                          【讨论】:

                                            【解决方案29】:

                                            我遇到了类似的问题(在 Windows 上),我的根本原因是 ANTIVIRUS 软件!它具有“自动遏制”功能,可以用某种虚拟机包装正在运行的进程。 症状是:pip install somemodule 在一个命令行窗口中工作正常,import somemodule 从另一个进程执行时失败并出现错误

                                            ModuleNotFoundError: No module named 'somemodule'
                                            

                                            【讨论】:

                                              【解决方案30】:

                                              在我的情况下(WIN10 主机上的 Ubuntu 20.04 虚拟机),我有一个混乱的情况,安装了许多版本的 Python 和共享库的不同点(在文件系统的许多点上安装了 pip)。我指的是 3.8.10 Python 版本。 经过多次测试,我发现了一个用谷歌搜索的建议(但是'对不起,我没有链接)。这就是我为解决问题所做的:

                                              1. 从 Ubuntu 20.04 VM 上的 shell 会话(在 Home 中,在我的例子中是 /home/hduser),我使用命令“jupyter notebook”启动了一个 Jupyter Notebook 会话。

                                              2. 然后,当 jupyter 运行时,我打开了一个 .ipynb 文件来给出命令。

                                              3. First : pip list --> 给我安装的包列表,sympy 不存在(尽管我使用“sudo pip install sympy”安装了它 命令。

                                              4. 最后使用命令 !pip3 install sympy (在 jupyter notebook 中 会话)我已经解决了这个问题,这里是屏幕截图:

                                              5. 现在,使用 !pip list 包“sympy”存在,并且正在工作:

                                              【讨论】:

                                                猜你喜欢
                                                • 1970-01-01
                                                • 1970-01-01
                                                • 2021-11-01
                                                • 2020-07-05
                                                • 2013-10-25
                                                • 2017-07-08
                                                • 1970-01-01
                                                相关资源
                                                最近更新 更多