无法导入明确安装的模块

问题描述 投票:92回答:18

安装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
>>> 

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

python mechanize python-module
18个回答
74
投票

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


1
投票

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


1
投票

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

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


0
投票

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

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


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


0
投票

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

ModuleNotFoundError: No module named 'somemodule'

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


0
投票

也许有点偏离主题,但我有问题import PyYAML。指出你需要import yaml。 (猜它是经典的rtfm ...)


0
投票

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

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


-1
投票

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

  • echo $PYTHONPATH和/或echo $PATH:在导入模块时,Python会搜索所需模块的其中一个环境变量(目录列表,:分隔)。导入问题通常是由于这些列表中没有正确的目录
  • which pythonwhich pipwhich easy_install:这些将告诉您每个可执行文件的位置。知道可能会有所帮助。
  • 像@JesseBriggs建议的那样使用virtualenv。它与pip配合得很好,可以帮助您隔离和管理单独的Python项目的模块和环境。

-7
投票

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

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


55
投票

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

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

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

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


13
投票

这是python路径问题。

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

/library/frameworks/Python.framework/versions/2.6/斌/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. 保存文件,重新启动终端,然后就完成了

6
投票

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

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

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

3
投票

我在尝试使用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命令与python2.7有关

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

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


2
投票

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

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.