проблема импорта с сервером twisted.web - PullRequest
1 голос
/ 15 мая 2010

Я только начинаю работу с twisted.web, и у меня возникают проблемы с импортом модуля Python в .rpy скрипт.

в C:\py\twisted\mysite.py, у меня есть это:

* Формат 1006 *». (Request.prepath)) request.write ( "") request.finish () вернуть сервер.NOT_DONE_YET

и в C:\py\twisted\index.rpy, у меня есть это:

import mysite
reload(mysite)

resource = mysite.MySite()

Я запустил twistd -n web --port 8888 --path C:\py\twisted в командной строке, и сервер успешно запустился. Но когда я запросил localhost:8888, я получил (огромную) трассировку стека, происходящую из ошибки ImportError:

<type 'exceptions.ImportError'>: No module named mysite

Я могу импортировать модуль из интерпретатора, и если я просто выполню index.rpy как скрипт Python, я не получу ошибку импорта. Документация по этому вопросу немного расплывчатая, она просто говорит: «Однако часто лучше определить подклассы Resource в модулях Python. Чтобы изменения в модулях были видимыми, необходимо либо перезапустить процесс Python, либо перезагрузить модуль: "(с здесь ).

Кто-нибудь знает правильный способ сделать это?

1 Ответ

5 голосов
/ 15 мая 2010

Краткий ответ: вам нужно установить PYTHONPATH для включения C:\py\twisted.

Длинный ответ ...

Сценарий rpy - это в основном просто некоторый код Python, как и любой другой код Python. Таким образом, импорт в скрипте rpy работает так же, как импорт в любом другом коде Python. Для наиболее распространенного случая это означает, что каталоги в sys.path посещаются один за другим по порядку, и если найден файл .py, соответствующий импортированному имени, этот файл используется для определения модуля.

sys.path в основном заполняется из статического определения, включая такие вещи, как C: \ Python26 \ Lib \ и из переменной окружения PYTHONPATH. Тем не менее, есть еще одна вещь, о которой стоит знать. Когда вы запускаете "python", текущий рабочий каталог добавляется в начало sys.path. При запуске "python C: \ foo \ bar \ baz.py", C:\foo\bar\' is added to the front of sys.path . But when you run "twistd ...", nothing useful is added to sys.path`.

Последнее поведение, вероятно, объясняет, почему ваши тесты работают, если вы запускаете скрипт rpy напрямую, или если вы запускаете python и пытаетесь импортировать модуль в интерактивном режиме, но терпите неудачу при использовании twistd. Добавление C:\py\twisted к переменной среды PYTHONPATH должно сделать модуль импортируемым, когда скрипт rpy запускается с сервера, который вы запускаете с twistd.

...