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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

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

發布時間:2023/12/1 python 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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程序,自定义模块的导入的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。