无法导入明确安装的模块


144

安装机械化后,我似乎无法导入它。

我已经尝试从pip,easy_install和通过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
>>> 

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


您能告诉我们运行的输出easy_install吗?此外,请确认的完整路径easy_installpip以及python
larsks 2013年

您确定未安装2.6(这是ubuntu上的默认设置吗(至少是在我的debian上)
dav1d 2013年

好了,简易安装的输出显示它已安装到2.7:已安装/usr/local/lib/python2.7/dist-packages/mechanize-0.2.6.dev_20130112-py2.7.egg
roy 2013年

@larks-在原始帖子中添加了该信息
罗伊

我刚刚从pypi和repo尝试了每种方式-setup.py,easy_install,pip,但是我不能让它失败。您能否检查一下您是否sys.path在正确的位置,ls -laR /usr/local/lib/python2.7/dist-packages/mech*检查权限问题,并imp.find_module("mechanize")区分无法找到和无法导入的错误?
DSM

Answers:


100

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


26
这件事发生在我身上,只是在奔跑sudo pip install ...。简单修复:sudo chmod -R ugo+rX /lib/python2.7/site-packages/
jozxyqk 2015年

3
我已经碰到过很多次了,我想我只是发现了原因:umask是通过sudo传递的,因此,如果您的个人umask太紧,并且您使用sudo进行安装,则文件和目录将受到过度限制。如果先简单地进行su,然后从完整的root shell进行安装,则最终的安装将是可用的(至少对我而言)。这是给点子使用的,但也可能适用于apt-get。如果其他人确认此原因,可能要相应地修改答案吗?
布兰登

添加到jozxyqk评论的:确保你做$ PIP显示了正确的目录<软件包>
费德里科

2
我也是。我用在Mac上的Python 3.6工作,所以sudo chmod 777 /usr/local/lib/python3.6/site-packages做的伎俩
安东尼奥·塞拉诺

3
sudo 777始终是个坏主意
马克思

81

我遇到了同样的问题:脚本import colorama被抛出并且导入错误,但是sudo pip install colorama告诉我“软件包已安装”。

我的解决方法:在不使用sudo:的情况下运行pip pip install colorama。然后pip同意需要安装它,然后安装它,然后我的脚本运行了。

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

更新:甚至更好,使用python -m pip install <package>。这样做的好处是,由于您正在执行要在其中安装软件包的特定版本的python,因此pip会明确将软件包安装到“正确的” python中。同样,在这种情况下,请不要使用sudo ...然后您将软件包放在正确的位置,但可能具有(不需要的)root权限。


1
或者,您可以使用sudo的-H标志
Graydyn Young

21

这是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路径中,我所做的就是将site-packages永久添加到PYTHONPATH中。

  1. 打开终端
  2. 输入open .bash_profile
  3. 在弹出的文本文件中,在最后添加以下行:

    导出PYTHONPATH = $ PYTHONPATH:/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/

  4. 保存文件,重新启动终端,然后完成

这对我帮助Jenkins使用硒python起作用。
edst

当我的bash脚本称为celery脚本时,这对我通过主管运行celery很有帮助。celery脚本无法将已安装的模块导入我的pip中。万分感谢。
Shivam Sharma

注意:导入错误的另一种可能性是您的计算机中安装了多个版本的Python。例如,一个来自系统的Python,另一个来自Miniconda或Anaconda。因此,请确保始终使用正确的相应“点”。
桑契特

8

实际上,Python导入机制可以运行:

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

1
在这种情况下,它不能是选项3;那不会抛出ImportError。
马丁·彼得斯

2
也许2?我只是不知道为什么将它安装在该库的错误位置,而其他大多数库都可以。
罗伊

3
选项4:您的PYTHONPATH是正确的,您的库在您想要的位置,您没有掩盖此内容的库...但是因为您使用的是sudo pip install它安装了root privs,并且在导入时由于缺少priv而受到轰炸读取或写入访问权限。
Dan H

2
不完全正确,@MartijnPieters:如果有以下形式的进口“从<包>进口<FOO>”,如果在封闭包装没有“富”,那么你会得到一个导入错误选项3
Dan H

@DanH当然可以,但这不是OP使用的形式。
马丁·彼得斯

8

我一直把头撞在显示器上,直到一位年轻的实习生告诉我,秘密是在模块目录中 “ 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

我能够通过组合方法解决此问题。首先,我遵循Chris的建议,打开了一个命令行,然后键入“ pip show packagename”。这提供了已安装软件包的位置。

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

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

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

不足之处?它是临时的,您需要每次将其添加到列表中。


5

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

对我有用的是:

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

希望这可以帮助。



2

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

(工作)

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

(不工作)

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

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-command链接到python2.7

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

在它旁边,我找到了一个链接,python3所以我使用了它。您也可以将链接更改为python3.4。那也可以解决。


1

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

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


1

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


1

另外,请确保您不要pip3与混淆pip。我发现安装的软件包pip无法正常工作,python3反之亦然。


0

通过easy_install或安装时pip,是否成功完成?全部输出是多少?您正在使用哪个python安装?sudo如果要将模块安装到系统目录中,则可能需要在安装命令前使用(如果使用的是系统python安装)。您的问题中没有很多有用的信息,但是一些可能会有所帮助的工具包括:

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

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

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


0

我遇到了这个确切的问题,但以上答案均无济于事。这使我发疯,直到我从父项目中导入后发现sys.path有所不同。原来,我已经使用importlib编写了一个小功能,以便导入不在项目层次结构中的文件。坏主意:我忘记了这样做。更糟糕的是,导入过程与sys.path混为一谈,并以这种方式保留了下来。非常糟糕的主意。

解决方案是停止此操作,只需将需要导入的文件放入项目中即可。另一种方法是将文件放入其自己的项目中,因为需要不时地对其进行重建,并且该重建与主项目的重建可能会也可能不会同时进行。


0

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

使用pip和pip3(使用sudo或不使用sip)安装后,我无法正常工作。我总是得到:

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的脚本,当我调用时,该脚本由python加载import

结论,请确保package.py在尝试导入时当前目录中没有任何内容。(并仔细阅读错误消息)。


0

我有类似的问题(在Windows上),根本原因是ANTIVIRUS软件!它具有“自动包含”功能,该功能将运行过程与某种虚拟机进行包装。症状是:pip install somemodule在一个cmd-line窗口中工作正常,并且import somemodule在从另一个进程执行时出现错误而失败

ModuleNotFoundError: No module named 'somemodule'

我希望这可以节省一些时间:)


0

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


0

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

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


0

这有效!!!

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

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

import <module_name>

0

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


0

对我有用的是:

python -m pip install -user {package name}

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


0

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

sudo su
pip install <module>

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


0

对我来说,这是确保模块的版本与我使用的Python版本保持一致。.我在装有Python 3.6的盒子上构建了映像,然后注入恰好安装了3.7的Docker映像中,然后敲了敲我的头当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
streetster

python --version给了我:Python 3.7.7,当我用pip检查软件包的安装位置时,显示librosa提供了;位置:/home/ec2-user/anaconda3/lib/python3.7/site-packages如何表示该软件包位于正确的位置,但是当我导入该软件包时给出:没有模块名称,我正在使用AWS Sagemaker env Pytorch_p36
Walid Bousseta

想必您要使用pytorch_p37吗?
streetster

没有pytorch_p37
Walid Bousseta

0

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


0

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

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

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

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


0

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

为我工作。


找不到pipenv
Walid Bousseta

0

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

在终端中修复:

py .py

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


0

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

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

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

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

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

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

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

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


0

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

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

sudo pip3.7 install <package>

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.