Вот моя установка: Mac, работающий под управлением OS X Tiger. Windows XP работает на виртуальной машине (Parallels). В Windows XP домашний каталог моего Mac отображается как сетевой диск.
У меня есть два файла в каталоге моего домашнего каталога Mac:
pass
import foo
Если я запустил test.py из своей виртуальной машины, набрав python test.py, я получу следующее:
Traceback (most recent call last):
File "test.py", line 1, in <module>
import foo
ImportError: No module named foo
Если я попытаюсь импортировать foo из консоли (запустив python под Windows из того же каталога), все будет хорошо:
Python 2.5.1 (r251:54863, Apr 18 2007, 08:51:08) [MSC v.1310 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import foo
>>>
Если я запустил test.py с Mac python, все будет хорошо.
Если я скопирую test.py и foo.py в другой каталог, я могу без проблем запустить test.py под Windows.
В исходном каталоге есть в этом.py, но он пуст. Более того, копирование его с другими файлами ничего не нарушает в предыдущем абзаце.
Переменные среды, связанные с Python, не установлены.
Есть идеи?






Добавить import sys; напечатайте sys.path до начала test.py. Посмотрите, что он распечатает в случае отказа. Если "." нет в списке, это может быть вашей проблемой.
Я обновил мод, но в целом каталог исполняемого модуля всегда добавляется в pythopath. CWD не всегда добавляется. В этом случае кажется, что CWD и каталог модуля - это одно и то же, поэтому это не имеет значения.
Как случайное предположение: доступны ли разрешения на foo.py из клиента Windows? (например, попробуйте открыть с помощью блокнота на виртуальной машине).
Если все в порядке, попробуйте запустить:
python -v -v test.py
и просмотр вывода (в качестве альтернативы установите PYTHONVERBOSE = 2). В нем должны быть перечислены все места, откуда он пытается импортировать foo. Сравнение его с аналогичным следом на работающей машине может дать некоторые дополнительные подсказки.
Разрешения кажутся нормальными (с обеих сторон). 'python -v -v test.py' показывает, что он не ищет в sys.path [0]; otoh, если я просто запустил «python -v -v», а затем наберу «import foo» в командной строке, он найдет его в первую очередь.
Это странно. Я не могу придумать ничего, что могло бы заставить его пропустить запись в sys.path (особенно если он действует по-другому в интерактивном режиме). Единственный подход, который я могу придумать, - это попытаться сузить причины (например, можно ли воспроизвести его на других сетевых дисках или после удаления в этом.py)
'.' отсутствует в списке, но CWD - это первая запись (которая, как я полагаю, является развернутой '.').