日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

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

發(fā)布時(shí)間:2023/12/1 python 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python中自定义模块导入飘红_hadoop streaming 中跑python程序,自定义模块的导入 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

今天在做代碼重構(gòu),以前將所有python文件放到一個(gè)文件夾下,上傳到hadoop上跑,沒(méi)有問(wèn)題;不過(guò)隨著任務(wù)的復(fù)雜性增加,感覺(jué)這樣甚是不合理,于是做了個(gè)重構(gòu),建了好幾個(gè)包存放不同功能的python文件,歷程如下:

1. 剛開(kāi)始的時(shí)候,在IDE里搞,點(diǎn)擊運(yùn)行,正確、非常贊;

2. 然后搬到服務(wù)器上搞,出現(xiàn)了這樣的問(wèn)題:

ImportError: no module named XXX

啊,看樣子是包引用中路徑不對(duì),于是找文章解決:

python中,每個(gè)py文件被稱之為模塊,每個(gè)具有__init__.py文件的目錄被稱為包。只要模

塊或者包所在的目錄在sys.path中,就可以使用import 模塊或import 包來(lái)使用

如果你要使用的模塊(py文件)和當(dāng)前模塊在同一目錄,只要import相應(yīng)的文件名就好,比

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

import b

但是如果要import一個(gè)不同目錄的文件(例如b.py)該怎么做呢?

首先需要使用sys.path.append方法將b.py所在目錄加入到搜素目錄中。然后進(jìn)行import即

可,例如

import sys

import os

curPath = os.path.abspath(os.path.dirname(__file__))

rootPath = os.path.split(curPath)[0]

sys.path.append(rootPath)

第一個(gè)問(wèn)題解決,高興!

3. 而后嘗試在hadoop-streaming上跑程序,額,一直在報(bào)錯(cuò):

ImportError: no module named XXX

心想也是因?yàn)檫@個(gè)路徑問(wèn)題,試了很多種方法:

后來(lái)在stackoverflow發(fā)現(xiàn)有人問(wèn)了同樣的問(wèn)題,并且我使用其中一個(gè)方案解決了:

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

當(dāng)Hadoop-Streaming啟動(dòng)python腳本時(shí),您的python腳本的路徑就是腳本文件的實(shí)際位置。 然而,hadoop以‘./‘開(kāi)頭,lib.py(它是一個(gè)符號(hào)鏈接)也在‘./‘。 因此,在導(dǎo)入lib.py之前,嘗試添加“sys.path.append(”./“)”“。?import sys sys.path.append(‘./‘) import lib

并且導(dǎo)入模塊和包時(shí),不能用 from XXX import YYY的方式做了,必須要用 import XXX, 使用YYY的時(shí)候,要用XXX.YYY來(lái)調(diào)用;反復(fù)嘗試終于發(fā)現(xiàn)了這點(diǎn)。也算沒(méi)白費(fèi)時(shí)間吧。

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的python中自定义模块导入飘红_hadoop streaming 中跑python程序,自定义模块的导入的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。