我一直在混淆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。 ##提前致谢。
答案 0 :(得分:2)
您的问题是,通过从mad.py
目录运行module_test
,您猜到Python会使用您当前的目录作为查找模块b
的基础。要证明它不起作用,请执行以下操作:
编辑mad.py
脚本并将以下内容添加到脚本的开头:
import sys
print(sys.path)
exit()
这将打印Python用于查找您尝试导入然后退出的模块的搜索路径。
打开终端,转到文件夹/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
这应该给你一个基本的修正,并帮助你解决问题。