2015-08-26 100 views
0

Python編程的新手並遇到導入模塊的問題。將模塊導入Python的問題

我有一個主應用程序(compare.py)與進口如下:

# import the necessary packages 
from skimage.measure import structural_similarity as ssim 
import matplotlib.pyplot as plt 
import numpy as np 
import os 
import skimage 
from skimage import io 
from skimage import color 
from epilib import mse 
from epilib import compare_images 

和我已經定義在epilib兩個功能,一是稱爲MSE()和一個被稱爲compare_images()。

mse()中的代碼需要numpy。當我執行'python compare.py'時,我得到以下錯誤信息:

文件「C:\ Users \ Dan \ epilib.py」,第7行,在mse err = np.sum((imageA.astype (「float」) - imageB.astype(「float」))** 2) NameError:未定義名稱'np'

我認爲'import numpy as np'是在導入epilib之前執行的, numpy圖書館可用於epilib?當我將'import numpy as np'添加到epilib的頂部時,問題就解決了。

我不認爲將所有導入語句移至epilib非常有效。我希望epilib只是一個函數庫,我可以根據需要導入到各種python程序中。

有沒有辦法做到這一點?

+0

有很好的理由。除此之外,神祕依賴從來都不是好事。每個模塊都應該導入成功運行所需的內容。 – michaelrccurtis

回答

0

這並不是多麼蟒蛇的作品,如果你想使用numpy庫模塊(在這種情況下eplib模塊),您需要將其導入該模塊中爲好,eplib會得到不numpy模塊進口你的compare.py

你應該eplib.py導入numpy的作爲 -

import numpy as np 

,我不認爲會有任何效率的問題,因爲一旦蟒蛇進口首次模塊,它緩存在模塊sys.modules,所以無論你何時重新導入它(即使它在一個不同的模塊中),只要它是相同的python進程,Python都不會重新導入它,相反它會從sys.modules返回模塊對象。

+0

謝謝你的解釋,現在有道理。 –