Проблемы PYTHONPATH с именами версионных пакетов вне пакетов сайта

Пытаясь решить проблему управления пакетами здесь, я узнал, что у меня могут быть проблемы с тем, как я использую PYTHONPATH для доступа к пакетам вне каталога site-packages.

Я получаю сообщение об ошибке импорта при попытке импортировать модули из пакета (скажем, wxPython) из его имени папки с версией каталога (т.е. wx-2.8-msw-unicode), когда указанный каталог не находится в каталоге пакетов сайта python.

Чтобы воссоздать проблему: создайте каталог вне каталога python, скажем C:\foo. Загрузите wxPython и поместите его в этот каталог (давая C:\foo\wx-2.8-msw-unicode). Добавьте еще, если хотите. Добавьте каталог C:\foo в переменную среды PYTHONPATH. Откройте новую интерактивную оболочку Python и запустите

import sys
for i in sys.paths:
    print i

чтобы убедиться, что путь существует (а он есть), затем

import wx

Я получаю сообщение об ошибке импорта. Что я делаю неправильно? Это правильное поведение?


person TorelTwiddler    schedule 07.07.2011    source источник
comment
Это полезно? stackoverflow.com/questions/1001851/pythonpath-ignored   -  person S.Lott    schedule 08.07.2011
comment
Похоже, в этой статье обсуждается порядок добавления каталогов в sys.path. Я не уверен, как это связано?   -  person TorelTwiddler    schedule 08.07.2011


Ответы (1)


Насколько я понимаю, это ожидаемое поведение. C:\foo находится в вашем пути к Python, но не содержит импортируемого модуля wx. Чтобы import wx преуспел, он должен найти один из wx.(py/pyc/pyd/dll/so) или каталог wx, содержащий файл __init__.py, непосредственно в одном из каталогов на вашем пути к Python.

Установщик обычно проверяет, находится ли он в доступном для импорта месте. Если вы хотите сделать это самостоятельно, вы должны убедиться, что wx оказался в доступном для импорта месте.

person Thomas K    schedule 07.07.2011
comment
Вот как я интерпретировал использование PYTHONPATH. Я отмечу это как правильный ответ в течение следующего часа, если не будет найдено другое объяснение. - person TorelTwiddler; 08.07.2011