无法导入已经安装的模块

237
安装了 mechanize 后,我好像无法导入它。
我尝试使用 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 的输出显示它已经安装到了2.7版本:Installed /usr/local/lib/python2.7/dist-packages/mechanize-0.2.6.dev_20130112-py2.7.egg。 - roy
我已经尝试了各种方式——使用pypi和repo中的setup.py、easy_install、pip,但我无法让它失败。 你可以检查sys.path以查看你是否在正确的位置查找,使用ls -laR /usr/local/lib/python2.7/dist-packages/mech*检查权限问题,以及查看imp.find_module("mechanize")以区分找不到和导入错误的区别吗? - DSM
@DSM 将此信息添加到原始帖子中。 - roy
请查看以下讨论:https://dev59.com/HVwY5IYBdhLWcg3wYm8B#34797844?noredirect=1 - Dan H
你尝试使用 conda 安装它了吗? - Charlie Parker
显示剩余3条评论
40个回答

0

大多数可能的情况已经在解决方案中得到了覆盖,我只是分享我的情况。我曾经在一个环境(例如X)中安装了一个包,并在另一个环境(例如Y)中导入该包。因此,请务必确保您从安装该包的环境中导入该包。


0

我解决了一个问题,即同样的库在一个项目(A)中运行良好,但在另一个项目(B)中导入这些相同的库会导致错误。我在Windows操作系统上使用Pycharm作为IDE。

因此,在尝试了许多潜在的解决方案并未成功解决问题后,我做了以下两件事情(删除“Venv”文件夹并重新配置解释器):

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

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

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


0
如果您正在使用虚拟环境,请使用pipenv install <module name>而不是pip install <module name>
对我有用。

找不到pipenv。 - Walid Bousseta

0

我知道这是一个非常老的帖子,但我没有找到任何对我的情况有用的答案(我正在使用arch linux)。 我在安装“nest_asyncio”包时遇到了类似的问题,该包明确已安装(在列出所有已安装的包时可见)。对于arch linux用户,有一种正确的方法来安装python包(正如Emanuel Fontelles已经在这里解释过)。 在我的情况下,解决方案只是卸载剩余的不工作的包(在我的情况下是“nest_asyncio”),然后使用以下命令重新安装它:

sudo pacman -S python-"nest_asyncio

这解决了所有问题。


0
我曾经遇到过这个问题,但以上的答案都没有起作用。这让我疯狂,直到我注意到在从父项目导入后,sys.path不同了。原来我使用importlib编写了一个小函数,以便导入项目层次结构之外的文件。这是个坏主意:我忘记了我已经这样做了。更糟糕的是,导入过程会干扰sys.path——并保持这种状态。非常糟糕。
解决方案是停止这个操作,将我需要导入的文件放入项目中。另一种方法是将该文件放入自己的项目中,因为它需要定期重建,而重建可能与主项目的重建相符,也可能不相符。

0

就像今天我的一个朋友为我做的那样,这是帮助我解决问题的方法(我使用的是Windows):

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

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

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

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

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

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

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

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


-1

也许有点跑题,但我在导入PyYAML时遇到了问题。需要注意的是你需要导入yaml。(猜测这是一个经典的RTFM...)


-1
在我的情况下,我还必须安装超级用户的模块。
sudo su
pip install <module>

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


不要使用sudo和pip。 - xotix
如果我需要以sudo身份运行Python脚本,那么以sudo方式安装所需的模块是最简单的解决方案。 - Zciurus

-1

对我来说可行的最简解决方案,我在这个帖子中没有看到提及:

我安装了多个版本的Python,但是尝试使用Python3.7--因此我必须使用:

sudo pip3.7 install <package>


不要使用sudo与pip一起使用,这会让你的软件包管理器感到难过。如果你一定要使用pip,请尝试使用--user标志。 - xotix
1
xotix,你能详细说明为什么有人应该关心软件包管理器的感受吗?如果你想说你应该遵循最小权限原则并且这不是必要的,那么也许你应该这样说。 - Sludge

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接