无法导入已经安装的模块

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个回答

1
此外,请确保不要混淆pip3pip。我发现用pip安装的软件包不能在python3中工作,反之亦然。

1
在我的情况下(一个安装在WIN10主机上的Ubuntu 20.04虚拟机),我安装了许多Python版本和各种共享库(使用pip安装在文件系统的多个位置)。我指的是3.8.10 Python版本。 经过多次测试,我在谷歌上找到了一个建议(但很抱歉,我没有链接)。以下是我解决问题所做的事情:
  1. 从Ubuntu 20.04虚拟机的shell会话中(在我的情况下位于Home目录,即/home/hduser内),使用命令“jupyter notebook”启动Jupyter Notebook会话。
  2. 当Jupyter正在运行时,我打开一个ipynb文件以发出命令。
  3. 首先:pip list --> 给我列出了已安装的软件包列表,但 sympy 不在其中(尽管我已经使用“sudo pip install sympy”命令安装了它)。
  4. 最后,通过在jupyter笔记本会话中使用!pip3 install sympy命令,我解决了这个问题,如下面的屏幕截图所示: enter image description here
  5. 现在,使用!pip list命令,软件包“sympy”已经存在并且正常工作: enter image description here

1

这个有效!!!

当模块安装到较旧版本的Python或另一个目录时,经常会出现这种情况,不用担心,解决方案很简单。 - 从安装模块的目录导入模块。 您可以通过首先导入Python sys模块,然后从安装模块的路径导入来实现此操作。

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

import <module_name>

1

不确定这是否会对任何人有所帮助,但我在使用 zsh 的 Mac M1 上遇到了类似的问题。结果发现我在 .zshrc 文件中设置了一个别名命令,其名称与我的 python 命令(python3)相同。

为了解决这个问题,我只需要取消别名命令即可。我运行了以下命令:

unalias python3

无论是从我的家庭终端还是从Visual Studio的终端。


0
今天,我发现setup.py包也会产生这个问题。
我有一个带有classifiers < 3的设置。
setup(
    name='data_reader',
    version='0.1',

    description='data_reader by Mithril ',
    long_description=long_description,

    author='Mithril',

    classifiers=[
        'Development Status :: 1 - Beta',
        'Programming Language :: Python :: 2',
        'Programming Language :: Python :: 2.6',
        'Programming Language :: Python :: 2.7',

        'Intended Audience :: Developers',
        'Operating System :: OS Independent',

        "License :: GPLv3",

        'Topic :: Internet :: WWW/HTTP',
        'Topic :: Software Development :: Libraries :: Tools',
        'Topic :: Software Development :: Libraries :: Python Modules',
    ],


)

我在一个conda环境中使用Python 3.7,发现

pip install .
# or
pip install git+https://github.com/eromoe/data_reader

所有都成功了,但是import data_reader报错not found

经过一些测试,发现只有在将classifiers更改为

    classifiers=[
        'Development Status :: 1 - Beta',
        "Programming Language :: Python :: 3",
        'Intended Audience :: Developers',
        'Operating System :: OS Independent',
        "License :: GPLv3",
        'Topic :: Internet :: WWW/HTTP',
        'Topic :: Software Development :: Libraries :: Tools',
        'Topic :: Software Development :: Libraries :: Python Modules',
    ],

重新安装一遍,导入变成正常了!


0
我通过在终端上调用以下命令解决了这个问题:
``` eval "$(conda shell.bash hook)" ```

0

对我来说,最重要的是确保模块的版本与我使用的Python版本相匹配。我在安装了Python3.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 the version that matches the version of Python you are using. What error do you get, and what is the output of python --version - mkst
python --version 给出的是:Python 3.7.7,当我使用 pip show librosa 检查包安装位置时,显示为:Location: /home/ec2-user/anaconda3/lib/python3.7/site-packages,这意味着包已经安装在正确的位置,但是当我尝试导入该包时却提示“no module name”。我正在 AWS Sagemaker 环境 Pytorch_p36 上工作。 - Walid Bousseta
你可能想使用 pytorch_p37 吗? - mkst
没有pytorch_p37。 - Walid Bousseta

0

我知道这是一个非常老的帖子,但对我来说,我安装了32位Python和64位Python后出现了问题。一旦我卸载了32位Python,一切都正常工作了。


0

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

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

  • which pythonwhich pipwhich easy_install:这些命令将告诉您每个可执行文件的位置。这可能有助于您了解情况。

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


0
我在使用Django时遇到了类似的问题。在我的情况下,我可以从Django shell导入模块,但无法从导入该模块的.py文件中导入。
问题是我正在从与安装该模块不同的virtualenv中运行Django服务器(因此执行.py)。
相反,shell实例在正确的virtualenv中运行。这就是为什么它能够工作的原因。

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