2010-11-08 52 views
4

有什麼可以指望在導入後立即重新加載這些模塊?這就是我正在審查這讓我不知道該代碼:是否有任何可能指向立即重新加載Python模塊?

import time 
import sys 
import os 
import string 
import pp 
import numpy 
import nrrd 
reload(nrrd) 
import smooth as sm 
reload(sm) 
import TensorEval2C as tensPP 
reload(tensPP) 
import TrackFiber4C as trackPP 
reload(trackPP) 
import cmpV 
reload(cmpV) 
import vectors as vects 
reload(vects) 

編輯:我認爲,這可能使pyc文件更容易的創建,但一些人指出,出現這種情況這第一次,每時間。

+4

不,當第一次導入模塊時,已經創建了'.pyc'文件。請打這個寫這個的人,或者寫一些無所事事的代碼,或者不要用很多評論來解釋他的奇怪黑客行爲。另外,這些是一些可怕的模塊名稱。 – delnan 2010-11-08 20:24:17

+0

我繼承了這個程序員代碼的一小部分,他們當時對python來說很新,所以我通常假設他們不知道當我看到瘋狂或非Pythonic的東西時Python是如何工作的 - 但是我試圖小心假設我總是知道更好。變量名通常超短,多餘的換行符和不必要的'對於範圍內的我(len(list)):'循環比比皆是。 – Thomas 2010-11-09 00:27:54

回答

6

我注意到,標準模塊只是導入:它是其他模塊重新加載。我希望編寫此代碼的人希望能夠輕鬆地重新加載整個軟件包(以便獲得最新的編輯)。把所有這些冗餘reload電話後,程序員只需編寫

>>> reload(package) 

要帶的東西最新的解釋,而不必鍵入

>>> reload(package.nrrd) 
>>> reload(package.sm) 
>>> reload(package.tensPP) 

等,所以請無視建議你對寫這個的程序員犯下暴力:他們是far from the only programmer誰在重新加載依賴關係時遇到問題。只要鼓勵他們將重新加載到一個便利功能。

+0

我正在運行一個嵌入式版本的Python(用於調試目的)重新加載主模塊,並且主模塊重新加載所有其他模塊,以確保它們都使用最新版本的代碼。這意味着我可以調試代碼而不必停止並重新啓動整個應用程序。 – 2010-11-08 21:06:36

+0

請參閱我給出的一個框架,它可以在更改時自動重新加載依賴關係。 – 2010-11-09 11:23:09

+0

似乎最可能的原因。 – Thomas 2010-11-18 04:26:40

1

.pyc文件將在第一次導入時創建,所以即使這不是一個很好的理由。

+0

我懷疑這有什麼好的理由。我當然希望它有一些遠程有效的理由。 – delnan 2010-11-08 20:25:03

+0

謝謝,更新了這個問題,以避免永久保留這個神話。 – Thomas 2010-11-09 00:34:47

6

這可能會導致某些事情發生;顯而易見的例子是導入時發生的副作用。例如,一個模塊可以記錄每次導入時的日期和時間。

但是,這可能沒有什麼好的理由。

0

這段代碼的執行環境是什麼?至少存在一個Python web框架,它可以做出與標準python不同的重新加載決定,當你進行一次「不需要」的更改時,會導致沮喪和困惑。