如何在库中使用冲突命名空间

时间:2013-03-13 18:57:15

标签: python packages python-import

我的包装有类似的结构:

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

现在我在导入标准库urllib3.filepost时出现此问题:

gonvaled@pegasus ~/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作为我的包名。

1 个答案:

答案 0 :(得分:2)

Python top.io中查找。

相反,Python正在查看当前目录。当前目录是查找导入的sys.path位置列表中的第一个位置。文件io.py位于您的本地目录中。

永远不要在你的包的里面运行你的python解释器(所以确保当前的工作目录不在top中),否则永远不要命名一个与你的名字相同的本地模块标准库。