Найти - Пользователи
Полная версия: import и регистр
Начало » Python для новичков » import и регистр
1
odnochlen
>>> import lxml.HTML
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named HTML
lxml\__init__.py
# this is a package
Почему не получается? Windows, питон 2 и 3.
doza_and
import lxml.html

Питон регистрозависимый язык. Почему оно должно большими буквами импортироваться?

ElementInclude.py
ElementInclude.pyc
ElementInclude.pyo
__init__.py
__init__.pyc
__init__.pyo
_elementpath.py
_elementpath.pyc
_elementpath.pyo
builder.py
builder.pyc
builder.pyo
cssselect.py
cssselect.pyc
cssselect.pyo
doctestcompare.py
doctestcompare.pyc
doctestcompare.pyo
etree.pyd
html
includes
isoschematron
lxml.etree.h
lxml.etree_api.h
objectify.pyd
pyclasslookup.py
pyclasslookup.pyc
pyclasslookup.pyo
sax.py
sax.pyc
sax.pyo
usedoctest.py
usedoctest.pyc
usedoctest.pyo
odnochlen
Да, но файловая система на винде - независимая, и HTML и html - один и тот же каталог. Читал, что для этого в __init__ надо заполнять __all__, но тут этого нет.
doza_and
А как ваш код потом под UNIX переносить если будет каша? __all__ для порядка конечно следовало заполнить.

На самом деле в виндах регистр тоже хранится
> ls
Aa.py
B.py
B.pyc
тут проходит import B
и не проходит import b

В WIN невозможно создать два файла которые отличаются только регистром в одной директории.

odnochlen
Я понимаю, просто я в книжке прочел, что без __all__ это будет возможно - а вот нет.

Если выводить список - то хранится, если искать HTML, то винда должна будет и его найти.
doza_and
odnochlen
винда должна будет и его найти

По поводу искать тут вообще забавно:
import glob
for i in glob.glob("B.py"):
   print i,"b.py" ==i
for i in glob.glob("b.py"):
   print i,"b.py" ==i
>>> 
B.py False
b.py True

glob пытается ЛОГИЧНО подстроится под нелогичное устройство WIN Для винды давно уже пора отменить независимость от регистра. После этого конечно все сильно вздрогнут, но потом будет логично :)
odnochlen
Под “искать” я имел в виду open(), и он таки регистронезависим.

doza_and
Для винды давно уже пора отменить независимость от регистра.
Для питона тоже пора много че отменить, но никто это делать не будет. И из x86 все легаси гавно повырезать, из-за которого он так греется.

Дык, вернемся к вопросу в ТС посте.
mironich
open(), и он таки регистронезависим.
Ну регистронезависимость в пуях к файлам зависит от ОС, и это уже не волнует интерпритатор правильно\неправильно путь указан, заранее он этого не проверит, а в остальных случаях там четко прописан список модулей за которые не прыгнешь.
odnochlen
Так а ГДЕ прописан этот список, если не в __init__.py?
Андрей Светлов

Питон использует регистрозависимый импорт, даже на Windows. Это сделано специально и осознанно. Код здесь: http://hg.python.org/cpython/file/f068c3e7743d/Python/import.c#l1620

Фича отключается установкой Environment Variable PYTHONCASEOK

This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB