2012-02-14 3 views
1

У меня возникают трудности с проектами в Python. Это относится к Qn 48 от Learn Python the Hard Way.Как правильно организовать файлы в проектах Python

Линия тестера lexicon_tests.py, который вырвет проблему:

from ex48 import lexicon 

Ошибка Я вижу это:

ImportError: no module named ex48 

Интересно, если это происходит потому, что я не организовали мои файлы правильно в папке проектов: у меня есть папка с именем ex48, подпапки которой включают tests и lexicon. В пределах lexicon у меня есть файл lexicon.py. В пределах tests, у меня есть файл lexicon_tests.py

Есть ошибки в выше организованной организации?

EDIT: Проводка код здесь -

В/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 с именем lexicon.

+0

Learn Python нелегкий путь: 'помощь ('импорт')'. ': D' – Droogans

ответ

1

Для этого

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

работать, вы должны поставить lexicon.py в папку ex48 и lexicon.py должен содержать scan функцию на уровне модуля, а не в качестве метода класса.

С текущего кода, где у вас есть класс lexicon в модуле lexicon в пакете lexicon, то оператор импорта должен будет выглядеть

from ex48.lexicon.lexicon import lexicon 
+0

Я подумал об этом и попробовал это тоже - не работал .. – melony

+0

@melony Вы попробовали это после того, как посоветовали другие ответы? –

+0

Да - но теперь я получаю новую ошибку - это указано как часть комментариев к предыдущему ответу. – melony

1

Ошибка указывает на то, что ex48 не находится в вашем пути поиска импорта python. Вы можете проверить, что при этом:

import sys 
    sys.path 

EDIT

Вот шаг за шагом учебник добавления пути к поиску пути импорта питона: Set up Windows Python Path system environment variable. Я предполагаю, что вы не добавили их должным образом, если они все еще не отображаются в sys.path, и до тех пор, пока они не сделают этот импорт, нет причин для работы.

EDIT

Теперь после ваших новых ошибок. Когда вы делаете from ex48 import lexicon один из следующих должно быть верно для того, чтобы работать:

  1. папка с именем lexicon существует в папке ex48 и какex48 и lexicon имеют __init__.py

  2. lexicon.py находится непосредственно в ex48, а также __init__.py находится в ex48.

EDIT

Ошибка вы говорите, вы получаете от вашего последнего комментария вызваны плохой identation. Код размещен выше потребности и дополнительный уровень identation для каждой строки ниже def scan(string):

+0

Вы также можете изменить тот же путь поиска импорта в Windows через' системные переменные среды' и нажав кнопку «расширенный», либо с помощью материала GNU в '~/.bashrc' (или иногда' .bash_profile'). – Droogans

+0

Yep - Путь C:/Python27/Проекты и C:/Python27/Проекты/ex48 не включены. Я добавил этот путь к переменным системной среды в Windows ... но я все равно получаю ту же ошибку. Более того, если я попробую sys.path, новый путь, который я включил, похоже, не появляется! Не понимаю этого. – melony

+0

Вы начали новый сеанс/терминал. Из того, что я знаю, переменные системных переменных не видны до тех пор, пока не откроется новая командная строка. – Bogdan

2

Проверьте, если файл __init__.py существует в ex48 папке. Требуется создать пакет и может быть пустым.

+0

Проверено - существует – melony

+0

Если 'lexicon' является вложенной папкой, он также должен иметь файл инициализации. – Karlisson

0

На самом деле, в вашем ex48 проекте, вы увидите, что есть setup.py. Там, вы увидите строку:

'packages': ['NAME'], 

Что вы хотите сделать, это изменить имя для имени папки (ex48), так это выглядит следующим образом:

'packages': ['ex48'], 

Убедитесь в в папке ex48 у вас есть lexicon.py с определенной функцией сканирования. Нет необходимости в новом классе.

Как только это было отредактировано nosetests должен работать правильно с:

from ex48 import lexicon 
+0

У его 'setup.py' уже есть правильная строка' packages', не так ли? –

Смежные вопросы