Python3导入错误

时间:2013-06-27 15:26:01

标签: python python-3.x importerror

我一直在混淆Python 3与Python 2有关导入的区别。

如果我有这样的目录......

module_test/ ->
  a/hello.py
  lib/mad.py

我想从lib / mad.py

导入hello模块

所以我写了这样的代码..

LIB / mad.py

import a.hello

我调用python lib / mad.py,但它发生了ImportError。

我不知道为什么会这样。

你知道吗?我想解决这个问题。

示例存储库为https://github.com/okamurayasuyuki/module_test/tree/master/lib。 ##提前致谢。

1 个答案:

答案 0 :(得分:2)

您的问题是,通过从mad.py目录运行module_test,您猜到Python会使用您当前的目录作为查找模块b的基础。要证明它不起作用,请执行以下操作:

  1. 编辑mad.py脚本并将以下内容添加到脚本的开头:

    import sys
    print(sys.path)
    exit()
    

    这将打印Python用于查找您尝试导入然后退出的模块的搜索路径。

  2. 打开终端,转到文件夹/module_test并运行以下命令:

    > python lib/mad.py
    

    现在您应该看到转储到终端的路径。请注意,列表中的第一个条目是文件夹' module_test / lib'不是' module_test'正如你想象的那样。

  3. 那么,你如何解决这个问题呢?

    简单:您只需要告诉Python应该用于查找模块的正确目录。为此,您必须设置PYTHONPATH环境变量:

    > export PYTHONPATH=$PYTHONPATH:/path/to/module_test
    

    现在,如果您尝试运行脚本,它应按预期导入a.hello


    PS:您应该阅读官方Python教程,特别是第6章,它解释了模块和包的概念:

    http://docs.python.org/3/tutorial/modules.html

    这应该给你一个基本的修正,并帮助你解决问题。