无法导入明确安装的模块

时间:2013-01-12 17:07:14

标签: python mechanize python-module

安装mechanize后,我似乎无法导入它。

我尝试从pip,easy_install和python setup.py install通过此repo: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
>>> 

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

33 个答案:

答案 0 :(得分:72)

在我的情况下,这是许可问题。该软件包以某种方式仅以root rw权限安装,其他用户无法使用它!

答案 1 :(得分:51)

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

我的修复:运行点没有sudo pip install colorama。然后pip同意它需要安装,安装它,我的脚本运行。

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

更新:更好,请使用python -m pip install <package>。这样做的好处是,因为你正在执行你希望包中的特定版本的python,pip将明确地将包安装到“正确”的python中。同样,在这种情况下使用sudo ...然后你在正确的地方获得包,但可能有(不需要的)root权限。

答案 2 :(得分:13)

这是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/

并且site-package不在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. 保存文件,重新启动终端,然后完成

答案 3 :(得分:5)

Python导入机制确实可行,所以:

  1. 你的PYTHONPATH错了,
  2. 您的图书馆未安装在您认为的位置
  3. 你有另一个同名的图书馆掩盖了这个

答案 4 :(得分:5)

我一直在敲打我的显示器,直到一位年轻的实习生告诉我秘密是在模块目录中“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,则最终会进行borked安装。

不工作:

python /root/foo/setup.py install

工作:

cd /root/foo
python setup.py install

答案 5 :(得分:3)

我在尝试使用通过sudo pip install keyring安装的密钥环时遇到此问题。如其他答案所述,就我而言,这是一个权限问题。

对我有用的东西

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

希望这会有所帮助。

答案 6 :(得分:2)

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

(干预了)

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

VS

(没用)

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

答案 7 :(得分:2)

在我的情况下,我运行了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 - 命令已链接到python2.7

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

就在旁边,我发现了一个名为python3的链接,所以我使用了它。您还可以将链接更改为python3.4。这也可以解决它。

答案 8 :(得分:2)

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

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

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

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

缺点?这是暂时的,您需要每次都将其添加到列表中。

答案 9 :(得分:1)

就我而言,这是一个问题,我想在Python 2.7环境中导入模块中的 init .py文件。

Python 3.3+具有隐式命名空间软件包,这些软件包允许它创建没有 init .py文件的软件包。

答案 10 :(得分:1)

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

答案 11 :(得分:1)

我是python的新手。 我通过更改项目解释器路径解决了此问题。
File -> Settings -> Project -> Project Interpreter

答案 12 :(得分:0)

就我而言,我还必须为超级用户安装模块。

sudo su
pip install <module>

在某些情况下,超级用户显然无法访问普通用户文件。

答案 13 :(得分:0)

此解决方案并不适用于所有人。仅适用于一组特定的新手(LIKE ME),他们执行了一组特定的操作。上面的答案对我都不起作用。

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

解决方案:只需删除venv文件夹,然后重新创建即可。

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

答案 14 :(得分:0)

对我有用的最简单的解决方案,在该线程中没有提到:

我安装了多个版本的Python,但尝试使用Python3.7-所以我不得不使用:

sudo pip3.7 install <package>

答案 15 :(得分:0)

就像今天的朋友为我所做的那样,这是对我有所帮助的东西(我正在使用Windows):

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

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

将打开一个新窗口。在左侧,有4个选项卡,按最上面的一个,即“ Virtualenv Environment”。 现在,在右侧窗口中,标记“现有环境”选项。 “翻译”行将变得清晰可见。按下该行右侧的“ ...”按钮。

现在,将打开一个浏览窗口。浏览到您自己安装了Python的目录。不是拥有PyCharm的人。到那里后,选择“ python.exe”文件,然后按OK(该窗口将消失)。

再次按“确定”(此窗口也会消失)。

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

现在,所有已安装的软件包都应该在项目解释器中可见,并由程序读取。

答案 16 :(得分:0)

也存在此问题。.该软件包已安装在Python 3.8.0上,但VS Code使用较旧的版本(3.4)运行我的脚本

在终端中修复:

py .py

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

答案 17 :(得分:0)

此外,请确保不要将pip3pip混淆。我发现与pip一起安装的软件包不能与python3一起使用,反之亦然。

答案 18 :(得分:0)

如果您使用的是虚拟环境,请使用pipenv install <module name>代替pip install <module name>

为我工作。

答案 19 :(得分:0)

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

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

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

注意:这可能是我的项目(B)的虚拟环境无法识别已经安装且正在运行的库的问题。

答案 20 :(得分:0)

我知道这是一篇非常老的文章,但对我来说,我遇到了安装32位python和64位python的问题。卸载32位python后,一切正常。

答案 21 :(得分:0)

对我来说,这是确保模块的版本与我使用的Python版本保持一致。.我使用Python 3.6 将图像构建在一个盒子上,然后注入发生的Docker图像中先安装 3.7 ,然后在Python告诉我未安装模块时敲打我​​的头...

draggable="false"对于Python 3.6 36m

bsonnumpy.cpython-36m-x86_64-linux-gnu.so for Python 3.7 37m

答案 22 :(得分:0)

我有类似的问题(在Windows上),我的案例的根本原因是 ANTIVIRUS 软件!它具有“Auto-Containment”功能,可以使用某种虚拟机包装运行进程。 症状是:pip install somemodule在一个cmd行窗口中正常工作,import somemodule在从另一个进程执行时失败,错误

ModuleNotFoundError: No module named 'somemodule'

我希望它会节省一些时间给某人:)

答案 23 :(得分:0)

对我有用的是:

python -m pip install -user {package name}

该命令不需要sudo。这已在OSX Mojave上进行了测试。

答案 24 :(得分:0)

解决方案中已经涵盖了大多数可能的情况,只是分享我的情况,我碰巧在一个环境(例如X)中安装了一个程序包,而在另一个环境中导入了该程序包(例如Y)。因此,始终确保要从安装软件包的环境中导入软件包。

答案 25 :(得分:0)

这有效!!!

这通常发生在将模块安装到旧版本的python或其他目录中时,因为解决方案很简单,所以不用担心。  -从安装模块的目录中导入模块。 为此,您可以先导入python sys模块,然后从模块安装路径导入

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

import <module_name>

答案 26 :(得分:0)

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

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

答案 27 :(得分:0)

我有这个确切的问题,但上面的答案都没有奏效。它引起了我的疯狂,直到我注意到从父项目导入后sys.path不同。事实证明,我曾使用importlib编写一个小函数,以便导入不在项目层次结构中的文件。不好的主意:我忘记了我做过这件事。更糟糕的是,导入过程与sys.path混乱 - 并保持这种方式。 非常坏主意。

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

答案 28 :(得分:0)

也许有点题外话,但是我对import PyYAML有疑问。指出您需要import yaml。 (猜测这是经典的rtfm ...)

答案 29 :(得分:0)

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

使用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。 (并彻底阅读错误消息)。

答案 30 :(得分:-1)

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

  • echo $PYTHONPATH和/或echo $PATH:在导入模块时,Python会搜索所需模块的其中一个环境变量(目录列表,:分隔)。导入问题通常是由于这些列表中没有正确的目录

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

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

答案 31 :(得分:-1)

我通过pip安装了colorama,并且得到了“ ImportError:没有名为colorama的模块”

因此,我使用“查找”进行搜索,找到了绝对路径,并将其添加到脚本中,如下所示:

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

它奏效了。

答案 32 :(得分:-6)

如果您学习如何使用virtualenv(这非常简单),您将会遇到更少的问题。你只需要使用virtualenv,然后你将使用本地(到项目)包。

通过路径,版本等解决了很多令我头痛的问题。