我遇到了一个非常奇怪的错误,我在从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'
答案 0 :(得分:1)
第一个(主)目录中是否有一个名为email.py
的文件?还是名为email
的文件夹?如果是,则由于python的查找机制(应用根优先于其他导入),这可能会影响导入行为。
来自docs :(重点是我)
导入名为
spam
的模块时,解释器首先搜索具有该名称的内置模块。如果找不到,它将在变量sys.path给出的目录列表中搜索名为spam.py
的文件。 sys.path从以下位置初始化:
- 包含输入脚本的目录(或当前目录) 如果未指定文件)。
- PYTHONPATH(目录名称列表,语法与shell变量PATH相同。)
- 与安装有关的默认设置。