今天在做代码重构,以前将所有python文件放到一个文件夹下,上传到hadoop上跑,没有问题;不过随着任务的复杂性增加,感觉这样甚是不合理,于是做了个重构,建了好几个包存放不同功能的python文件,历程如下:

1. 刚开始的时候,在IDE里搞,点击运行,正确、非常赞;

2. 然后搬到服务器上搞,出现了这样的问题:

ImportError: no module named XXX

啊,看样子是包引用中路径不对,于是找文章解决:

python中,每个py文件被称之为模块,每个具有__init__.py文件的目录被称为包。只要模

块或者包所在的目录在sys.path中,就可以使用import 模块或import 包来使用

如果你要使用的模块(py文件)和当前模块在同一目录,只要import相应的文件名就好,比

如在a.py中使用b.py:

import b

但是如果要import一个不同目录的文件(例如b.py)该怎么做呢?

首先需要使用sys.path.append方法将b.py所在目录加入到搜素目录中。然后进行import即

可,例如

import sys

import os

curPath = 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 sys

sys.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来调用;反复尝试终于发现了这点。也算没白费时间吧。

python中自定义模块导入飘红_hadoop streaming 中跑python程序,自定义模块的导入相关推荐

  1. python中自定义模块导入飘红_Pychorm提示Unresolved reference 导入模块报错

    最近使用Pychorm编写Python时,每次要引入自定义模块,就会报错,提示"Unresolved reference" Unresolved reference 'LoginC ...

  2. IDEA中springboot项目@SpringBootApplication飘红问题的奇葩解决方案

    错误如下: 捉急的请看黑色加粗文字,如果于你没用,请允许我事先抱歉. 原因分析: 本地maven仓库D:\你的仓库位置\repository\org\springframework\boot\spri ...

  3. webapp新建文件没有JSP问题和IDEA中web.xml的<servlet-name>名字一样还飘红的问题

    当我的webapp右键new的时候没有出现JSP类型的文件,于是我按照 参考一的方式. 然后我们进入,注意这两个路径指向的是同一个webapp.不然到时候的web.xml中的servlet会飘红的. ...

  4. idea引入maven依赖飘红解决方法

    进入在idea中遇到maven依赖飘红的现象,下面来说说我经历了什么.引入oracle的驱动jar. 首先,在远程仓库中并没oracle的jar包,因为收费,所以你要去oracle官网下来到本地,或者 ...

  5. 【零基础学python】:华为官方出品的《看漫画学Python》全彩PDF,495页资源分享

    前言 说起编程语言,Python 也许不是使用最广的,但一定是现在被谈论最多的.随着近年大数据.人工智能的兴起,Python 越来越多的出现在人们的视野中. 在各家公司里,Python 还常被用来做快 ...

  6. 微信小程序自定义navigationbar与下拉刷新思考

    第一次开发小程序,产品提出要求导航栏字体样式,然后系统的未提供修改的接口. 那么只能自定义导航栏才行呀. 迅速的自定义了一个导航栏 app.json中添加 "navigationStyle& ...

  7. python自定义安装哪些不需要_【1】python模块:自定义模块的3种导入方式

    一.定义 模块就是用一堆的代码实现了一些功能的代码的集合,通常一个或者多个函数写在一个.py文件里,而如果有些功能实现起来很复杂,那么就需要创建n个.py文件,这n个.py文件的集合就是模块.如果不懂 ...

  8. 一句python,一句R︱列表、元组、字典、数据类型、自定义模块导入(格式、去重)

    先学了R,最近刚刚上手python,所以想着将python和R结合起来互相对比来更好理解python.最好就是一句python,对应写一句R. pandas中有类似R中的read.table的功能,而 ...

  9. python中导入模块是用哪个关键字_python中导入模块的关键字是什么_后端开发

    c语言中\t是什么意思_后端开发 C语言的[\t]代表的意思是水平制表符,相当于按了键盘上的TAB按键,通常宽度相当于8个空格的位置,但有些软件允许设置tab的宽度,在双引号或定界符表示的字符串中有效 ...

最新文章

  1. 假设检验怎么做?这次把方法+Python代码一并教给你
  2. linux手动安装unzip_centos下离线安装zip和unzip
  3. LibManagementSys图书管理系统
  4. 【Auto.js】为任何指定QQ好友点赞
  5. qt 16进制字符串和十六进制数_Python字符串类型及其操作
  6. 下拉菜单实现树状结构_树形图:复杂层次结构的数据可视化
  7. Kernel Memory Layout on ARM Linux
  8. 不可小视的贝叶斯(二)
  9. 数据库事务隔离级别转
  10. xcode6新建pch文件过程
  11. splay详解(三)
  12. Python 格式化输出 —— 小数转化为百分数
  13. 我的Linux笔记5--我要连网
  14. ATmega128定时器
  15. 设备\Device\Harddisk0\D 有一个不正确的区块
  16. python存根文件_打包存根文件
  17. 编译原理-递归子程序法
  18. python列表索引超出范围 等于啥_Python列表错误,列表索引超出范围
  19. [大数据计算基础] 大数据计算系统
  20. 什么是机器语言、汇编语言、高级语言?

热门文章

  1. PostGIS之路——几何对象编辑(二)
  2. 水稻已知os基因号,利用DAVIA进行GO功能富集分析
  3. AUTOSAR协议解析篇(一)-J1939协议解析
  4. AUTOSAR从入门到精通100讲(三十八)-通信网络中的⽐特和帧同步技术
  5. 作为一个算法攻城狮,你训练的算法翻车了该怎么办?
  6. 云顶之弈机器人法爆_云顶之弈10.16b机器人阵容推荐 云顶之弈10.16b机器人娱乐阵容玩法攻略...
  7. php版本7历史,php的版本发展历史(1995-2020)
  8. 《01》ECMAScript 6 简介
  9. linux 用mutex定义一个linkedlist,【基于LINUX的操作系统实验教程最终版材料】
  10. java word模版填充_[转载]java向word模板中填充数据(总结)