1

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

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

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

我想从 lib/mad.py 导入 hello 模块

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

库/mad.py

import a.hello

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

我不知道为什么会这样。

你有什么主意吗?我想解决这个问题。

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

4

1 回答 1

2

您的问题是,通过mad.pymodule_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”。

那么,您如何解决问题呢?

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

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

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


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

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

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

于 2013-10-03T02:33:03.983 回答