深圳南山区网站建设,wordpress 懒人图库,吉林省建设工程造价网站,网站建设logo图片今天在做代码重构#xff0c;以前将所有python文件放到一个文件夹下#xff0c;上传到hadoop上跑#xff0c;没有问题#xff1b;不过随着任务的复杂性增加#xff0c;感觉这样甚是不合理#xff0c;于是做了个重构#xff0c;建了好几个包存放不同功能的python文件以前将所有python文件放到一个文件夹下上传到hadoop上跑没有问题不过随着任务的复杂性增加感觉这样甚是不合理于是做了个重构建了好几个包存放不同功能的python文件历程如下1. 刚开始的时候在IDE里搞点击运行正确、非常赞2. 然后搬到服务器上搞出现了这样的问题ImportError: no module named XXX啊看样子是包引用中路径不对于是找文章解决python中每个py文件被称之为模块每个具有__init__.py文件的目录被称为包。只要模块或者包所在的目录在sys.path中就可以使用import 模块或import 包来使用如果你要使用的模块(py文件)和当前模块在同一目录只要import相应的文件名就好比如在a.py中使用b.pyimport b但是如果要import一个不同目录的文件(例如b.py)该怎么做呢首先需要使用sys.path.append方法将b.py所在目录加入到搜素目录中。然后进行import即可例如import sysimport oscurPath os.path.abspath(os.path.dirname(__file__))rootPath os.path.split(curPath)[0]sys.path.append(rootPath)第一个问题解决高兴3. 而后尝试在hadoop-streaming上跑程序额一直在报错ImportError: no module named XXX心想也是因为这个路径问题试了很多种方法后来在stackoverflow发现有人问了同样的问题并且我使用其中一个方案解决了:When Hadoop-Streaming starts the python scripts, your python script‘s path is where the script file really is. However, hadoop starts them at ‘./‘, and your lib.py(it‘s a symlink) is at ‘./‘, too. So, try to add ‘sys.path.append(./)‘ before you import lib.py like this:import syssys.path.append(‘./‘)import lib当Hadoop-Streaming启动python脚本时您的python脚本的路径就是脚本文件的实际位置。 然而hadoop以‘./‘开头lib.py(它是一个符号链接)也在‘./‘。 因此在导入lib.py之前尝试添加“sys.path.append(”./“)”“。 import sys sys.path.append(‘./‘) import lib并且导入模块和包时不能用 from XXX import YYY的方式做了必须要用 import XXX 使用YYY的时候要用XXX.YYY来调用反复尝试终于发现了这点。也算没白费时间吧。