2012-11-23 111 views
2
$ bin/python src/app/utils/loader.py newTasks checkForStuff 
Traceback (most recent call last): 
    File "bin/python", line 135, in <module> 
    execfile(__file__) 
    File "src/app/utils/loader.py", line 154, in <module> 
    module = __import__(args.module) 
ImportError: No module named newTasks 

從以下loader.py:的Python導入錯誤

if __name__ == '__main__': 
    parser = argparse.ArgumentParser(description='Runs python') 
    parser.add_argument('module', metavar='module', help="the target module") 
    args = parser.parse_args() 
    module = __import__(args.module) 

newTasks.py是在相同的目錄中loader.py。它在我的開發箱上工作,我做了一個svn導出到分段,併發生上述情況。任何指針?

只有我能解決的材料差異是這次我用完了virtualenv。

編輯: 我命令行改爲:

$ bin/python src/app/utils/loader.py utils.newTasks checkForStuff 

和模塊發現確定。但我的下一個命令是調用的模塊功能checkForStuff之一:

parser.add_argument('func',metavar='function', help="the target function name") 
... 
func_param = getattr(module,args.func) 

,現在無法找到函數?

Traceback (most recent call last): 
    File "bin/python", line 135, in <module> 
    execfile(__file__) 
    File "src/app/utils/loader.py", line 156, in <module> 
    func_param = getattr(module,args.func) 
AttributeError: 'module' object has no attribute 'checkForStuff' 

如果我走進斌/ Python的:

>>> import utils.newTasks as nt 
>>> nt.checkForStuff 
<function checkForStuff at 0x29b2f50> 

這是煩人!

回答

1

bin/python不是您的登臺機器上的python二進制文件。檢查它是否像普通Python一樣將腳本目錄插入到sys.path中。

+0

我以爲你是對的,但我通過for循環搜索sys.path列表時犯了一個錯誤。 src/app目錄在路徑中,所以應該選擇utils.newTasks模塊。還請注意我的編輯以上 - 我的機器之間的差異是,我在virtualenv下運行這個。 – user1561108

+0

@ user1561108:loader.py位於src/app/utils目錄中,不在src/app目錄中。 utils.newTasks和newTasks是不同的名稱(它是Python中的'__main__',它可以使用不同的名稱導入相同的模塊)。使用普通的python newTasks將成功導入給定的命令行。儘管你應該提供全名來避免陷阱。 – jfs

+0

看到我的更新。如果我限定了模塊的名稱,但不包含屬於它的功能! – user1561108