无法导入已安装的模块
- 2024-11-25 08:50:00
- admin 原创
- 183
问题描述:
安装mechanize后,我似乎无法导入它。
我尝试过从 pip、easy_install 以及通过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
>>>
我之前运行的安装报告已成功完成,因此我预计导入会成功。什么原因导致了此错误?
解决方案 1:
就我的情况来说,这是权限问题。不知何故,该软件包仅以 root 读写权限安装,其他用户无法读写它!
解决方案 2:
我遇到了同样的问题:带有的脚本import colorama
抛出了ImportError
,但sudo pip install colorama
告诉我“包已安装”。
我的解决方法:运行不带 sudo 的pip : pip install colorama
。然后 pip 同意需要安装它,然后安装它,然后我的脚本运行。
或者更好的是,使用python -m pip install <package>
。这样做的好处是,由于您正在执行想要安装包的特定版本的 Python,pip 将明确地将包安装到“正确的”Python 中。同样,在这种情况下不要使用sudo
...然后您会在正确的位置获得包,但可能具有(不需要的)root 权限。
我的环境是 Ubuntu 14.04 32 位;我想我在激活虚拟环境之前和之后看到了这个。
解决方案 3:
我能够通过组合方法来纠正这个问题。首先,我按照 Chris 的建议,打开命令行并输入“pip show packagename”,这提供了已安装包的位置。
接下来,我打开 Python,输入“import sys”,然后输入“sys.path”,以显示 Python 在哪里搜索我导入的任何包。可惜的是,第一步中显示的位置不在列表中。
最后一步,我输入了“sys.path.append('package_location_seen_in_step_1')。您可以选择重复第二步来查看列表中的位置。
测试步骤,尝试再次导入包...它有效。
缺点呢?它是暂时的,每次你都需要将其添加到列表中。
解决方案 4:
这是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/
并且 site-package 不在 python 路径中,我所做的就是将 site-packages 永久添加到 PYTHONPATH 中。
打开终端
键入 open .bash_profile
在弹出的文本文件中,在末尾添加以下行:
export PYTHONPATH=$PYTHONPATH:/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/
保存文件,重启终端,就完成了
解决方案 5:
Python 导入机制确实有效,因此,可以:
你的 PYTHONPATH 是错误的,
您的库未安装在您认为的位置
您有另一个同名的库掩盖了这个库
解决方案 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-->
如果您尝试通过调用其路径从任何其他目录运行setup.py,最终会导致安装失败。
不起作用:
python /root/foo/setup.py install
确实有效:
cd /root/foo
python setup.py install
解决方案 7:
我在尝试使用通过 安装的密钥环时遇到了这个问题sudo pip install keyring
。正如其他答案中提到的,在我的情况下,这是一个权限问题。
对我有用的是:
卸载的密钥环:
sudo pip uninstall keyring
我使用了 sudo 的
-H
选项并重新安装了密钥环:
sudo -H pip install keyring
解决方案 8:
检查 IDE 或代码编辑器的解释器和系统上是否使用了相同的 Python 版本。例如,使用以下命令在终端中检查 Python 版本,python3 --version
然后通过以下方式在 VSCode 中检查解释器的 Python 版本cmd+shift+p
-> Python:选择解释器 -> 选择与终端中看到的相同的版本。
解决方案 9:
在 PyCharm 中,我通过更改项目解释器路径解决了这个问题。
File -> Settings -> Project -> Project Interpreter
File -> Invalidate Caches…
之后可能需要。
解决方案 10:
我无法使我的 PYTHONPATH 正常工作。我意识到添加以下内容export
可以修复该问题:
(确实有效)
export PYTHONPATH=$PYTHONPATH:~/test/site-packages
对阵
(无效)
PYTHONPATH=$PYTHONPATH:~/test/site-packages
解决方案 11:
重新定位的虚拟环境(venv)也可能出现此问题。
我有一个在根目录中设置了 venv 的项目。后来我创建了一个新用户,并决定将项目移至该用户。我没有只移动源文件并重新安装依赖项,而是将整个项目连同 venv 文件夹一起移至新用户。
之后,我安装的依赖项被添加到全局site-packages
文件夹而不是 venv 内的文件夹,因此在此环境中运行的代码无法访问这些依赖项。
要解决这个问题,只需删除 venv 文件夹并重新创建它,如下所示:
$ deactivate
$ rm -rf venv
$ python3 -m venv venv
$ source venv/bin/activate
$ pip install -r requirements.txt
解决方案 12:
对我有用的是:
python -m pip install -user {package name}
该命令不需要 sudo。这已在 OSX Mojave 上进行了测试。
解决方案 13:
就我而言,我已经运行了pip install Django==1.11
,但它不会从python
解释器中导入。
浏览 pip 的命令我发现pip show
它看起来像这样:
> pip show Django
Name: Django
Version: 1.11
...
Location: /usr/lib/python3.4/site-packages
...
注意位置显示“3.4”。我发现 -commandpython
链接到python2.7
/usr/bin> ls -l python
lrwxrwxrwx 1 root root 9 Mar 14 15:48 python -> python2.7
就在旁边,我发现了一个名为 的链接python3
,所以我使用了它。您也可以将链接更改为python3.4
。这也可以解决问题。
解决方案 14:
我通过 pip 安装了 colorama,但出现了“ImportError: 没有名为 colorama 的模块”
因此我用“find”进行搜索,找到了绝对路径并将其添加到脚本中,如下所示:
import sys
sys.path.append("/usr/local/lib/python3.8/dist-packages/")
import colorama
而且它确实有效。
解决方案 15:
我遇到了同样的问题,更新setuptools
有帮助:
python3 -m pip install --upgrade pip setuptools wheel
此后,重新安装该软件包,它就应该正常工作了:)
问题在于,如果包setuptools
很旧,那么包的构建就会不正确。
解决方案 16:
__init__.py
就我而言,这是模块中缺少文件的问题,我想在 Python 2.7 环境中导入该文件。
Python 3.3+ 具有隐式命名空间包,允许它创建没有文件的包__init__.py
。
解决方案 17:
也有这个问题。该包安装在 Python 3.8.0 上,但 VS Code 使用旧版本(3.4)运行我的脚本
在终端修复:
py <yourfile>.py
确保您在正确的 Python 版本上安装该包。
解决方案 18:
如果提到的其他答案对您不起作用,请尝试删除您的 pip 缓存并重新安装包。我的机器运行的是 Ubuntu14.04,它位于 下~/.cache/pip
。删除这个文件夹对我来说很管用。
解决方案 19:
另外,请确保不要pip3
与混淆pip
。我发现使用 安装的软件包pip
无法与 一起使用python3
,反之亦然。
解决方案 20:
我遇到过类似的问题(在 Windows 上),而我遇到的根本原因是防病毒软件!它具有“自动遏制”功能,可将正在运行的进程与某种虚拟机包装在一起。症状是:pip install somemodule
在一个命令行窗口中运行良好,但从import somemodule
另一个进程执行时失败并出现错误
ModuleNotFoundError: No module named 'somemodule'
解决方案 21:
就我的情况而言(WIN10 主机上的 Ubuntu 20.04 VM),我遇到了混乱的情况,安装了许多版本的 Python 和各种共享库(在文件系统的许多点使用 pip 安装)。我指的是 3.8.10 Python 版本。经过多次测试,我在谷歌搜索时找到了一个建议(但很抱歉,我没有链接)。这是我为解决问题所做的:
从 Ubuntu 20.04 VM 上的 shell 会话(在 Home 内部,在我的情况下是 /home/hduser),我使用命令“jupyter notebook”启动了 Jupyter Notebook 会话。
然后,当 jupyter 运行时,我打开了一个 .ipynb 文件来发出命令。
首先:pip list --> 给我已安装的软件包列表,但是,sympy 不存在(尽管我已经使用“sudo pip install sympy”命令安装了它。
最后使用命令 !pip3 install sympy (在 jupyter notebook 会话中)我解决了这个问题,这里是屏幕截图:
现在,使用 !pip list 可以发现包“sympy”已经存在,并且可以正常运行:
解决方案 22:
在我的例子中,我假设包已安装,因为它出现在 的输出中pip freeze
。然而,site-packages/*.dist-info
尽管缺少实际的包内容(可能是由于意外删除),但仅文件夹就足以让 pip 将其列为已安装。即使所有路径设置都正确,也会发生这种情况,如果您尝试,pip install <pkg>
它会说“要求已满足”。
解决方案是手动删除dist-info
文件夹,以便 pip 意识到包内容丢失。然后,重新安装应该会重新填充意外删除的所有内容
解决方案 23:
不确定这是否会对任何人有所帮助,但我在 Mac M1 上使用 zsh 时遇到了类似的问题。原来我在 .zshrc 文件中设置了一个与我的 python 命令 (python3) 同名的别名命令。
为了解决这个问题,我只需要取消命令的别名。我运行了:
unalias python3
无论是从我的家庭终端还是从 Visual Studio 中的终端。
解决方案 24:
我通过在终端上调用以下命令解决了这个问题
eval "$(conda shell.bash hook)"
解决方案 25:
当您通过easy_install
或安装时pip
,是否成功完成?完整输出是什么?您使用的是哪个 python 安装?sudo
如果您要将模块安装到系统目录(如果您使用的是系统 python 安装,则可能需要在安装命令之前使用)。您的问题中没有太多有用的信息,但一些可能有帮助的工具包括:
echo $PYTHONPATH
和/或echo $PATH
:导入模块时,Python 会搜索这些环境变量(目录列表,带分隔符)之一:
以查找所需的模块。导入问题通常是由于这些列表中缺少正确的目录造成的which python
、which pip
或which easy_install
:这些会告诉您每个可执行文件的位置。了解这些可能会有所帮助。使用virtualenv,就像 @JesseBriggs 建议的那样。它非常适合
pip
帮助您隔离和管理单独的 Python 项目的模块和环境。
解决方案 26:
我遇到了同样的问题,但上述所有答案都不起作用。这让我很抓狂,直到我注意到从父项目导入后 sys.path 发生了变化。原来我使用 importlib 编写了一个小函数来导入不在项目层次结构中的文件。坏主意:我忘了自己做过这件事。更糟糕的是,导入过程弄乱了 sys.path——并保持原样。非常糟糕的主意。
解决方案是停止这种情况,只需将我需要导入的文件放入项目中即可。另一种方法是将文件放入其自己的项目中,因为它需要不时重建,并且重建可能与主项目的重建一致,也可能不一致。
解决方案 27:
我在系统上安装了 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 的脚本,当我调用时,python 会加载它import
。
package.py
结论,尝试导入时,请确保当前工作目录中没有任何内容。(并仔细阅读错误信息)。
解决方案 28:
我在使用 Django 时也遇到了类似的问题。就我而言,我可以从 Django shell 导入模块,但不能从导入模块的 .py 导入。问题是我从安装模块的不同虚拟环境
中运行 Django 服务器(因此执行 .py) 。
相反,shell 实例在正确的虚拟环境中运行。因此,它才有效。
解决方案 29:
这有效!
当模块安装到旧版本的 Python 或其他目录时,通常会发生这种情况,不用担心,因为解决方案很简单。 - 从安装模块的目录中导入模块。您可以先导入 Pythonsys
模块,然后从安装模块的路径导入
import sys
sys.path.append("directory in which module is installed")
import <module_name>
解决方案 30:
大多数可能的情况已经在解决方案中涵盖,只是分享我的情况,我碰巧在一个环境中安装了一个包(例如X
),然后在另一个环境中导入了该包(例如Y
)。因此,请务必确保从安装包的环境中导入包。