2012-02-14 56 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