python - 奇怪的 Python 导入错误
问题描述
我遇到了这个非常奇怪的错误,我在从 AWS EMR 的主目录启动的 Python shell 中遇到导入错误,而当我cd
进入另一个目录并在那里启动 Python shell 时,相同的包会被很好地导入。
EMR 已安装 Python 2.7。请让我知道我可以提供哪些其他信息。这个问题快把我逼疯了!
$ python
Python 2.7.16 (default, Mar 18 2019, 18:38:44)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-28)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> import smtplib
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib64/python2.7/smtplib.py", line 46, in <module>
import email.utils
File "email.py", line 2, in <module>
from email.mime.multipart import MIMEMultipart
ImportError: No module named mime.multipart
>>> os.path.realpath('./')
'/home/abc123'
>>>
$ mkdir temp
$ cd temp
[temp]$ python
Python 2.7.16 (default, Mar 18 2019, 18:38:44)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-28)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> import smtplib
>>> os.path.realpath('./')
'/home/abc12/temp'
解决方案
email.py
第一个(主)目录中是否有一个文件?还是一个名为 的文件夹email
?如果是,那么这可能会影响导入行为,因为 python 的查找机制(应用程序根优先于其他导入)。
来自文档:(强调我的)
当
spam
导入一个名为的模块时,解释器首先搜索具有该名称的内置模块。spam.py
如果没有找到,它会在由变量 sys.path 给出的目录列表中搜索一个文件。sys.path 从这些位置初始化:
- 包含输入脚本的目录(或未指定文件时的当前目录)。
- PYTHONPATH(目录名称列表,与 shell 变量 PATH 具有相同的语法)。
- 安装相关的默认值。
推荐阅读
- azure-active-directory - Gettiong code=organizationfromtenantguidnotfound 试图通过 Graph API 以用户身份发送电子邮件
- openshift - Openshift 应用程序健康检查
- php - 如何在php函数中一次返回多个值
- c - 构建静态库并在编译时将其链接到内核模块
- go - 我可以从方法返回匿名结构吗?
- graphviz - 如何使框出现在我想要的位置?
- python - 使用 Pygame 的 Python Pong 游戏
- istio - Istio Egress Gateway:使用与默认端口不同的端口
- excel - 发生错误 9 时的 VBA 不显示错误消息
- reactjs - nextjs 网站在直接链接到页面或动态路由时一直显示 403