2011-02-02 26 views
0

好吧我們在任何地方都找不到解決方案來解決我的問題,我希望解決方案很簡單。以前我有一個沒有文件夾的gae項目的平面文件系統。我一直在重構一些代碼,我試圖把一些文件放在一個文件夾中。我有點新,我從來沒有做過這樣的事情,但互聯網上沒有任何事情表明我不應該輕易地將我的文件移動到文件夾中。我將__init__.py文件添加到文件夾,並從我的主程序導入文件夾名稱。然而,當我試圖在一個文件訪問某個特定的功能,扼流圈和說AttributeError: 'module' object has no attribute 'site1_ripper'在python谷歌應用引擎中導入自定義軟件包

這裏是我的文件結構:

main.py 
SiteCrawlers\ 
    __init__.py 
    site1_ripper.py 

這裏是文件的重要組成部分:

main.py

import SiteCrawlers 
class Updater(webapp.RequestHandler): 
    def get(self): 
     SiteCrawlers.site1_ripper.siteCrawler() 

site1_ripper.py

def siteCrawler() 
    #stuff here 

回答

3

我認爲問題在於,除非在__init__.py中指定,否則您需要明確導入site1_ripper。讓你的主要進口是:

import SiteCrawlers.site1_ripper 
+0

由於這個解決它。你能否擴展「除非在__init __。py`中指定」部分? – Milo 2011-02-02 20:27:23

+1

如果你的`__init __。py`文件有`import site1_ripper`這一行,那麼當你導入整個模塊時它就可用。查看標準庫中的sqlite3的[__init__.py](http://svn.python.org/view/python/branches/release27-maint/Lib/sqlite3/__init__.py?view=markup),然後嘗試導入它在python解釋器中。比較這兩個`import sqlite3 as s; dir(s)`和`import sqlite3.dbapi2 as t; DIR(噸)`。它們應該幾乎完全相同。 – chmullig 2011-02-02 20:41:13

0

在你的主文件的嘗試:

from SiteCrawlers.site1_ripper import siteCrawler 

class Updater(webapp.RequestHandler): 
    def get(self): 
     siteCrawler()