2013-03-13 26 views
2

У меня есть структура, подобная этой для моих пакетов:Как использовать сталкивающееся пространство имен в библиотеке

top/ 
├── __init__.py 
└── io 
    └── __init__.py 

Теперь у меня есть эта проблема с импортом стандартной библиотекой urllib3.filepost:

[email protected] ~/top » python 
Python 2.7.2 (default, Jan 11 2013, 17:58:01) 
[GCC 4.4.5] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import urllib3.filepost 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/home/gonvaled/.virtualenvs/python2.7.2-wavilon1/lib/python2.7/site-packages/urllib3/__init__.py", line 16, in <module> 
    from .connectionpool import (
    File "/home/gonvaled/.virtualenvs/python2.7.2-wavilon1/lib/python2.7/site-packages/urllib3/connectionpool.py", line 42, in <module> 
    from .request import RequestMethods 
    File "/home/gonvaled/.virtualenvs/python2.7.2-wavilon1/lib/python2.7/site-packages/urllib3/request.py", line 12, in <module> 
    from .filepost import encode_multipart_formdata 
    File "/home/gonvaled/.virtualenvs/python2.7.2-wavilon1/lib/python2.7/site-packages/urllib3/filepost.py", line 11, in <module> 
    from io import BytesIO 
ImportError: cannot import name BytesIO 

Почему стандартная библиотека смотрит в top.io? Как я могу избежать этого? Я бы очень хотел использовать top.io для моего имени пакета.

ответ

2

Python is не ищет в top.io.

Вместо этого Python ищет в текущий каталог. Текущий каталог - это первое место в списке местоположений для поиска импорта в sys.path. Файл io.py находится в вашем локальном каталоге.

Никогда не запускать питон переводчика внутри вашего пакета (поэтому убедитесь, что текущий рабочий каталог не в top), а в противном случае не имя локального модуля, который имеет такое же имя, как и стандартную библиотека.

+0

Но будет ли @gonvaled быть в порядке, когда его библиотека будет использоваться как таковая, и у него нет интерпретатора, работающего в его каталоге 'top'? –

+0

@MartinStone: Да, не работает внутри 'top' означает, что с ним все будет в порядке. Expanded. –

Смежные вопросы