python中自定义模块导入飘红_hadoop streaming 中跑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.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程序,自定义模块的导入相关推荐
- python中自定义模块导入飘红_Pychorm提示Unresolved reference 导入模块报错
最近使用Pychorm编写Python时,每次要引入自定义模块,就会报错,提示"Unresolved reference" Unresolved reference 'LoginC ...
- IDEA中springboot项目@SpringBootApplication飘红问题的奇葩解决方案
错误如下: 捉急的请看黑色加粗文字,如果于你没用,请允许我事先抱歉. 原因分析: 本地maven仓库D:\你的仓库位置\repository\org\springframework\boot\spri ...
- webapp新建文件没有JSP问题和IDEA中web.xml的<servlet-name>名字一样还飘红的问题
当我的webapp右键new的时候没有出现JSP类型的文件,于是我按照 参考一的方式. 然后我们进入,注意这两个路径指向的是同一个webapp.不然到时候的web.xml中的servlet会飘红的. ...
- idea引入maven依赖飘红解决方法
进入在idea中遇到maven依赖飘红的现象,下面来说说我经历了什么.引入oracle的驱动jar. 首先,在远程仓库中并没oracle的jar包,因为收费,所以你要去oracle官网下来到本地,或者 ...
- 【零基础学python】:华为官方出品的《看漫画学Python》全彩PDF,495页资源分享
前言 说起编程语言,Python 也许不是使用最广的,但一定是现在被谈论最多的.随着近年大数据.人工智能的兴起,Python 越来越多的出现在人们的视野中. 在各家公司里,Python 还常被用来做快 ...
- 微信小程序自定义navigationbar与下拉刷新思考
第一次开发小程序,产品提出要求导航栏字体样式,然后系统的未提供修改的接口. 那么只能自定义导航栏才行呀. 迅速的自定义了一个导航栏 app.json中添加 "navigationStyle& ...
- python自定义安装哪些不需要_【1】python模块:自定义模块的3种导入方式
一.定义 模块就是用一堆的代码实现了一些功能的代码的集合,通常一个或者多个函数写在一个.py文件里,而如果有些功能实现起来很复杂,那么就需要创建n个.py文件,这n个.py文件的集合就是模块.如果不懂 ...
- 一句python,一句R︱列表、元组、字典、数据类型、自定义模块导入(格式、去重)
先学了R,最近刚刚上手python,所以想着将python和R结合起来互相对比来更好理解python.最好就是一句python,对应写一句R. pandas中有类似R中的read.table的功能,而 ...
- python中导入模块是用哪个关键字_python中导入模块的关键字是什么_后端开发
c语言中\t是什么意思_后端开发 C语言的[\t]代表的意思是水平制表符,相当于按了键盘上的TAB按键,通常宽度相当于8个空格的位置,但有些软件允许设置tab的宽度,在双引号或定界符表示的字符串中有效 ...
最新文章
- 假设检验怎么做?这次把方法+Python代码一并教给你
- linux手动安装unzip_centos下离线安装zip和unzip
- LibManagementSys图书管理系统
- 【Auto.js】为任何指定QQ好友点赞
- qt 16进制字符串和十六进制数_Python字符串类型及其操作
- 下拉菜单实现树状结构_树形图:复杂层次结构的数据可视化
- Kernel Memory Layout on ARM Linux
- 不可小视的贝叶斯(二)
- 数据库事务隔离级别转
- xcode6新建pch文件过程
- splay详解(三)
- Python 格式化输出 —— 小数转化为百分数
- 我的Linux笔记5--我要连网
- ATmega128定时器
- 设备\Device\Harddisk0\D 有一个不正确的区块
- python存根文件_打包存根文件
- 编译原理-递归子程序法
- python列表索引超出范围 等于啥_Python列表错误,列表索引超出范围
- [大数据计算基础] 大数据计算系统
- 什么是机器语言、汇编语言、高级语言?
热门文章
- PostGIS之路——几何对象编辑(二)
- 水稻已知os基因号,利用DAVIA进行GO功能富集分析
- AUTOSAR协议解析篇(一)-J1939协议解析
- AUTOSAR从入门到精通100讲(三十八)-通信网络中的⽐特和帧同步技术
- 作为一个算法攻城狮,你训练的算法翻车了该怎么办?
- 云顶之弈机器人法爆_云顶之弈10.16b机器人阵容推荐 云顶之弈10.16b机器人娱乐阵容玩法攻略...
- php版本7历史,php的版本发展历史(1995-2020)
- 《01》ECMAScript 6 简介
- linux 用mutex定义一个linkedlist,【基于LINUX的操作系统实验教程最终版材料】
- java word模版填充_[转载]java向word模板中填充数据(总结)