Моя проблема в том, как Python ищет модули в Windows / Linux.
У меня есть каталог foo
на компьютере с Windows 7 (NTFS), который я монтирую в виртуальном госте Ubuntu 10.04, работающем на той же машине (через гостевые дополнения VirtualBox). Внутри foo
находится файл OS.py
(обратите внимание на верхний регистр) со следующим содержимым:
bar = 1
Вот вывод сеанса Python (2.5.4) на хосте (Win 7) внутри foo
:
>>> f = open('os.py') # Note the lower case
>>> f.readlines()
['bar = 1\n']
>>> f.close()
>>> import os
>>> dir(os)
(content of the Python standard os package)
А вот вывод на гостевой (Ubuntu) с Python 2.6.5 в foo
:
>>> f = open('os.py') # Note the lower case
>>> f.readlines()
['bar = 1\n']
>>> f.close()
>>> import os
>>> dir(os)
['__builtins__', '__doc__', '__file__', '__name__', '__package__', 'bar']
Таким образом, на обеих платформах Python загружает один и тот же файл foo/OS.py
при использовании open('os.py')
, что нормально, поскольку NTFS не учитывает регистр. Что я не понимаю, так это другое поведение в отношении import
. Я бы ожидал, что foo/OS.py
импортируется на обеих платформах, или, по крайней мере, поведение одинаково.
Есть ли причина такого несоответствия?
Примечание: ''
- это первая запись в sys.path
на обеих платформах.