2013-04-08 88 views
2

我已經通過以前的答案,這似乎暗示我應該能夠使用看起來相對嘗試超越進口頂級包訪問蟒蛇父文件夾

雖然這似乎沒有工作。我的文件結構如下:

scraper/ 
    __init__.py 
    bot/ 
      scraper.py 
      __init__.py 
      wigan/ 
        council.py 
        __init__.py 

我用我能夠從刮刀負荷會:

from wigan import council 

雖然從議會,沒有了以下工作的努力時加載scraper.py:

from .. import scraper 
from scraper.bot import scraper 
from scraper.bot.scraper import scraper 

任何幫助將是偉大的。謝謝:-)

+0

你得到了什麼樣的錯誤?例外,警告或什麼都沒有? – J0HN 2013-04-08 17:44:32

+0

ImportError當我嘗試執行scraper.bot,ValueError時,我使用.. – Patrick 2013-04-08 17:47:26

+0

你應該把scraper文件夾放到'site-packages'或import sys中的另一個文件夾中; print(sys.path)'並重試導入語句 – User 2013-04-08 18:16:52

回答

0

我懷疑你遇到的問題是你正在運行一個位於包中的腳本。這是Python中最笨拙支持的功能之一。當您直接運行腳本時,它會將當前路徑置於Python搜索路徑的開頭。如果你在一個包裏面,這將是錯誤的。

要正常運行scrapper.py(如果那是你的腳本),你應該改變,以最高級別文件夾(無論是上述scrapper/),然後運行python -m scrapper.bot.scrapper

或者,如果您添加頂層文件夾到Python的搜索路徑,或者通過使用PYTHONPATH環境變量,或者通過安裝它(或適當.pth文件)到site-packages文件夾,然後將當前目錄的限制會放鬆,你可以從任何地方運行腳本。

如果您還想通過其他模塊的名稱導入模塊,還有其他問題可以作爲腳本運行。該腳本將被導入爲__main__,而不是其實際名稱。如果您也通過名稱導入它,則會得到腳本的第二個副本,這可能意味着它無法按預期工作(如果模塊中存在任何全局狀態,則它們在副本之間可能不一致)。這是經常提示腳本儘可能少做工作的一個原因(只需從另一個模塊導入某些內容,然後運行它)。你也許想重構你的代碼來做到這一點。