在安装mechanize后,我似乎无法导入它。

我已经尝试从pip、easy_install和通过python setup.py从这个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
>>> 

我之前运行的安装报告已经成功完成,因此我希望导入能够正常工作。是什么导致了这个错误?


当前回答

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

其他回答

我已经解决了我的问题,相同的库在一个项目(A)中工作良好,但在另一个项目(B)中导入这些相同的库会导致错误。我使用Pycharm作为IDE在Windows操作系统。 所以,在尝试了许多潜在的解决方案,但都未能解决问题后,我做了以下两件事(删除“Venv”文件夹,并重新配置解释器):

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

2-Step 1 (deleting "venv" folder) causes error in Python Interpreter Configuration, and there is a message shown at top of screen saying "Invalid python interpreter selected for the project" and "configure python interpreter", select that link and it opens a new window. There in "Project Interpreter" drop-down list, there is a Red colored line showing previous invalid interpreter. Now, Open this list and select the Python Interpreter(in my case, it is Python 3.7). Press "Apply" and "OK" at the bottom and you are good to go.

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

在PyCharm中,我通过更改项目解释器路径解决了这个问题。

文件->设置->项目->项目解释器

File -> Invalidate缓存…之后可能需要。

在我的例子中,我假设安装了一个包,因为它出现在pip freeze的输出中。但是,只是site-packages/*。Dist-info文件夹足以让PIP将其列为已安装,尽管缺少实际的包内容(可能是由于意外删除)。即使所有的路径设置都是正确的,也会发生这种情况,如果您尝试pip install <pkg>,它会说“需求已经满足”。

解决方案是手动删除dist-info文件夹,以便pip意识到包内容丢失。然后,重新安装应该会重新填充意外删除的任何内容

我通过一种组合方法纠正了这个问题。首先,我听从克里斯的建议,打开命令行,输入“pip show packagename” 这提供了已安装包的位置。

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

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

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

缺点呢?它是临时的,每次都需要将其添加到列表中。

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

相反,shell实例在正确的virtualenv中运行。这就是为什么它有效的原因。