无法导入明确安装的模块

roy*_*roy 120 python python-module mechanize

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

我尝试从pip,easy_install和via 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
>>> 
Run Code Online (Sandbox Code Playgroud)

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

小智 85

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

  • 这发生在我身上,只是运行`sudo pip install ...`.简单修复:`sudo chmod -R ugo + rX/lib/python2.7/site-packages /` (21认同)
  • sudo 777 总是很糟糕的主意 (11认同)
  • 我遇到过这么多次,我想我刚刚发现了原因:umask是通过sudo传递的,所以如果你的个人umask很紧,你使用sudo进行安装,那么文件和目录就会被过度限制.如果你只是先su然后从完全root shell进行安装,那么结果安装是可用的(至少对我而言).这是为了pip,但也可能适用于apt-get.如果其他人确认这个原因,可能要相应修改答案? (3认同)
  • 我也是。我在Mac上使用Python 3.6,所以`sudo chmod 777 / usr / local / lib / python3.6 / site-packages`可以解决问题 (2认同)

Dan*_*n H 69

我有同样的问题:脚本与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权限.

  • upvote使用`python -m pip install`. (30认同)

小智 18

这是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/
Run Code Online (Sandbox Code Playgroud)

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


MJ_*_*MJ_ 14

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

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

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

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

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


Ali*_*har 8

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

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

  • 在这种情况下不能是选项 3;这不会引发 ImportError。 (3认同)
  • 选项4:你的PYTHONPATH是对的,你的库就在你想要的地方,你没有一个库掩盖这个...但是因为你使用了'sudo pip install`它安装了root privs,而且在导入时有些东西是由于缺乏读取或写入访问而遭到轰炸. (3认同)
  • 也许2?我只是不知道为什么它会安装在这个库的错误位置,大多数其他库都没问题. (2认同)
  • @MartijnPieters不太正确:如果以“来自&lt;package&gt; import &lt;foo&gt;”的形式进行导入,并且如果阻塞的软件包没有“ foo”,则对于选项3会出现导入错误。 (2认同)
  • @DanH 当然,但这不是 OP 使用的形式。 (2认同)

小智 7

我在尝试使用通过sudo pip install keyring. 正如其他答案中所述,就我而言,这是一个权限问题。

什么对我有用:

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

希望这可以帮助。


Loc*_*ane 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-->
Run Code Online (Sandbox Code Playgroud)

如果您尝试通过调用其路径从任何其他目录运行setup.py,则最终会进行borked安装.

不工作:

python /root/foo/setup.py install
Run Code Online (Sandbox Code Playgroud)

工作:

cd /root/foo
python setup.py install
Run Code Online (Sandbox Code Playgroud)


Ann*_*eva 6

检查您的 IDE 或代码编辑器的解释器与您的系统是否使用相同的 python 版本。例如,在终端中检查您的 python 版本并python3 --version 通过 -> Python 检查 VSCode 中解释器的 python 版本cmd+shift+p:选择解释器 -> 选择与您在终端中看到的版本相同的版本。在此输入图像描述


小智 5

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

(做了工作)

export PYTHONPATH=$PYTHONPATH:~/test/site-packages
Run Code Online (Sandbox Code Playgroud)

(不工作)

PYTHONPATH=$PYTHONPATH:~/test/site-packages
Run Code Online (Sandbox Code Playgroud)


小智 5

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