安装成功后的ImportError

18 浏览
0 Comments

安装成功后的ImportError

我成功地使用pip install 安装了一个库。但是当我尝试导入它时,Python报错ImportError: No module named 。为什么会出现这个错误,我该如何使用已安装的库?

0
0 Comments

当你使用pip成功安装一个库后,却在导入库时遇到了ImportError错误,可能的原因和解决方法如下:

1. 检查你是否在正确的虚拟环境中安装库。在使用虚拟环境时,需要确保你在正确的环境下进行安装和导入库。你可以通过运行pip --version命令检查pip的版本,确认你使用的是正确的虚拟环境。

2. 有一些库的包名称与库的名称不同。你可以查看它们的在线文档(使用关键词python <library>进行谷歌搜索),以确定你是否正确导入了包。有时候,库的包名称可能与库的名称不完全一致,需要注意这一点。

希望这些解决方法对你有帮助!

0
0 Comments

ImportError after successful pip installation

在安装完库之后,出现ImportError的问题通常是因为系统中存在多个版本的Python解释器和pip版本。使用python -m pip install <library-name>而不是pip install <library-name>可以确保库被安装到默认的Python解释器中。

需要注意的是,个人经验建议不要使用sudo pip install将包安装到系统默认的Python解释器中,这可能会导致各种混乱的问题。如果有需要,请先检查是否可以使用virtualenv

现代系统通常会预装多个Python解释器。每个解释器都维护着自己安装的库的集合。在安装新的库时,了解这些库实际上被安装到哪个解释器中非常重要。

在Unix系统中,可以使用shell来了解发生了什么。输入which -a python可以显示PATH中的所有解释器。第一行对应着在命令行中运行python时使用的解释器。

/private/tmp/py32/bin/python
/usr/local/bin/python
/usr/bin/python

每个pip版本都属于一个解释器。输入which -a pip可以显示所有pip版本。同样,第一行是在shell中输入pip时将调用的版本。

/usr/local/bin/pip
/usr/bin/python

需要注意的是,在这种情况下,python属于安装在/private/tmp/py32/中的解释器,但pip安装到了/usr/local/bin中的解释器。在成功安装库之后,您将无法在默认的Python解释器中导入它。

那么如何导入已安装的库呢?

第一种方法是使用完整路径启动所需的解释器。所以,如果您输入/usr/local/bin/python,您将能够导入该库。

第二种(通常更受欢迎)的方法是明确调用正确的pip版本。为此,您可以使用python -m pip install <library-name>而不是pip install <library-name>。这将调用属于默认Python解释器的pip版本。

现代系统中有哪些拥有多个相同Python版本的情况呢?当您看到/usr/local/bin/python时,通常意味着您自己安装了它。

我的观点是,并不仅仅只有一个python,而是有多个Python解释器。通常情况下,默认安装了一个python2.x和一个python3.x解释器。嗯,也许我需要重新写一下,以使我的观点更清晰。

是的,在Unix上有默认的系统Python解释器,而不是默认安装了多个Python2或3解释器,如果您看到其他解释器,那通常意味着您自己安装了它们,which -a python应该返回一个路径,新安装时应该非常明确,您不应该触碰默认的Python解释器。如果您不知道自己在做什么,最好使用virtualenv或pyenv。

Cunningham认同使用virtualenvs而不是触碰system的Python是最好的方式。然而,许多人仍然方便地使用sudo pip install。我不认为将其安装到系统Python中是可怕的。毕竟,在虚拟环境出现之前,我们可能都是这样做的。

当我想要使用不同版本的Python运行代码或测试新功能时,我使用pyenv;对于其他所有情况,我使用系统Python,因为我对所有的工作原理有很好的了解。但是这种理解是通过多年来多次破坏我的操作系统得来的,也是通过SO上的一些帖子,例如为什么apt-get不再工作了...一些人安装了多个Python版本,然后更改了默认版本,试图解决ImportError: No module named <library-name>的问题。

我会考虑添加一个指向virtualenv的免责声明。人们至少应该有一个参考,以避免破坏自己的系统的首选方法。您知道是否有一个问题-答案对,解释了为什么sudo pip install是错误的,以及如何设置virtualenv以避免破坏系统的Python吗?

对不起,我脑子里没有,我不认为sudo pip install是邪恶的,我认为安装多个相同Python版本是问题所在。

我们在聊天中继续讨论吧。

对我来说,>>> sudo chown -R $USER /Library/Python/2.7 >>> python -m pip install <module>解决了问题 🙂

which -a python /home/coldshot/anaconda3/bin/python /usr/bin/python /bin/python 如果已经安装了mtcnn并且出现导入错误,则卸载mtcnn $ sudo -H pip uninstall mtcnn $ python -m pip install mtcnn 收集mtcnn 安装已收集的包:mtcnn 成功安装mtcnn-0.0.9

因此,在明确调用虚拟环境目录中的python后,如果模块未导入,这是否意味着根本没有安装?讽刺的是,当我运行pip freeze / pip list时,它显示已安装该版本的模块,所以这让人困惑。

0