2012-02-14 73 views
1

我在Python中遇到了一些項目問題。這是參考Qn 48Learn Python the Hard Way如何在Python項目中正確組織文件

測試儀lexicon_tests.py那的投擲了一個問題行:

from ex48 import lexicon 

我看到的錯誤是:

ImportError: no module named ex48 

我不知道這是因爲我還沒有安排我的文件正確地在項目文件夾內:我有一個名爲ex48的文件夾,其子文件夾包括testslexicon。在lexicon之內,我有文件lexicon.py。在tests之內,我有文件lexicon_tests.py

在上述組織中是否有錯誤?

編輯:張貼在這裏的代碼 -

在/ ex48,我有setup.py

try: 
    from setuptools import setup 
except ImportError: 
    from distutils.core import setup 

config = { 
    'description': 'My Project', 
    'author': 'MyName', 
    'url': 'URL to get it at.', 
    'download_url': 'Where to download it.', 
    'author_email': 'My email.', 
    'version': '0.1', 
    'install_requires': ['nose'], 
    'packages': ['ex48'], 
    'scripts': [], 
    'name': 'projectname' 
} 

setup(**config) 

在/ ex48 /詞庫,我有lexicon.py

class lexicon: 
    @staticmethod 

    def scan(string): 

     direction = ['north', 'south', 'east', 'west', 'down', 'up', 'left',   'right', 'back'] 
     verbs = ['go','stop','kill','eat'] 
     stop = ['the','in', 'of', 'from', 'at','it'] 
     nouns = ['door', 'bear', 'princess', 'cabinet'] 

     words = string.split() 

     result = [] 
     for word in words: 
       if word in direction: 
       result.append(('direction',word)) 

和等等。 。 。與return result在最後。所有環境變量都已正確添加。我看到的錯誤是ImportError,名稱詞彙。

+0

學習Python硬盤的方式:'幫助( '進口')'。 ':D' – Droogans 2012-02-14 11:49:25

回答

1

對於這個

from ex48 import lexicon 
result = lexicon.scan("north south east") 

工作,你應該把lexicon.py文件夾ex48中,並lexicon.py應該包含在模塊級一個scan功能,而不是作爲一個類的方法。

以您目前的代碼,你的包lexicon有一個類lexicon模塊lexicon,import語句將不得不像

from ex48.lexicon.lexicon import lexicon 
+0

我想到了這一點,也嘗試了這一點 - 沒有工作.. – melony 2012-02-14 12:56:23

+0

@melony您是否按照其他答案的建議後嘗試它? – 2012-02-14 12:58:28

+0

是的 - 但我現在得到一個新的錯誤 - 表示這是對上一個答案的評論的一部分。 – melony 2012-02-14 13:33:26

1

錯誤提示ex48不在您的python導入搜索路徑中。您可以檢查做:

import sys 
    sys.path 

編輯

這是一個循序漸進的添加路徑到Python的導入搜索路徑的步驟教程:Set up Windows Python Path system environment variable。我猜你沒有正確添加它們,如果它們仍然沒有出現在sys.path中,並且直到它們確實導入沒有理由工作。

編輯

現在你以後新的錯誤。當你做from ex48 import lexicon下列操作之一應該是真實的,爲了使這種工作:

  1. 名爲lexicon一個文件夾中的文件夾ex48的存在,ex48lexicon有一個__init__.py

  2. lexicon.py是直接位於ex48__init__.py是在ex48

編輯

錯誤你說你從你最後的評論得到壞identation造成的。你的代碼發佈上述需求和額外identation水平低於def scan(string):

+0

您還可以修改Windows,超越同進口搜索路徑通過'系統環境variables',然後點擊「高級」按鈕,或者用GNU的東西在'〜/ .bashrc'(或有時'.bash_profile')。 – Droogans 2012-02-14 11:53:00

+0

是的 - C:/ Python27/Projects和C:/ Python27/Projects/ex48的路徑不包括在內。我添加了這個路徑到Windows上的系統環境變量......但我仍然得到相同的錯誤。此外,如果我嘗試sys.path,我包含的新路徑似乎並沒有顯示出來!不明白這一點。 – melony 2012-02-14 12:02:30

+0

您是否開始新的會話/終端。從我所知道的系統變量更改不可見,直到打開新的命令提示符。 – Bogdan 2012-02-14 12:07:24

2

檢查每一行,如果一個文件__init__.py在ex48文件夾中存在。它需要創建一個包並且可以是空的。

+0

已檢查 - 它存在 – melony 2012-02-14 12:33:32

+0

如果'lexicon'是一個子文件夾,它也必須有一個init文件。 – Karlisson 2012-02-14 14:07:39

0

其實,在你的ex48的項目,你會看到有一個setup.py文件。在那裏,你會看到一行:

'packages': ['NAME'], 

什麼你想要做的是改變名稱到您的文件夾名稱(ex48),所以它看起來是這樣的:

'packages': ['ex48'], 

確保在ex48文件夾中,您已經定義了掃描函數的lexicon.py。不需要新班級。

一旦這樣被編輯nosetests應與正常運行:

from ex48 import lexicon 
+0

他的'setup.py'已經有了正確的'packages'行,不是嗎? – 2012-10-20 19:27:30