首页 > 解决方案 > 奇怪的 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'

标签: pythonpython-importamazon-emr

解决方案


email.py第一个(主)目录中是否有一个文件?还是一个名为 的文件夹email?如果是,那么这可能会影响导入行为,因为 python 的查找机制(应用程序根优先于其他导入)。

来自文档:(强调我的)

spam导入一个名为的模块时,解释器首先搜索具有该名称的内置模块。spam.py如果没有找到,它会在由变量 sys.path 给出的目录列表中搜索一个文件。sys.path 从这些位置初始化:

  • 包含输入脚本的目录(或未指定文件时的当前目录)。
  • PYTHONPATH(目录名称列表,与 shell 变量 PATH 具有相同的语法)。
  • 安装相关的默认值。

推荐阅读