2013-03-13 250 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是不是正在尋找top.io

相反,Python是看在當前目錄。當前目錄中的位置尋找一個進口sys.path列表中的第一個位置。文件io.py位於您的本地目錄中。

從不運行Python解釋裏面包裹的(所以一定要確保當前的工作目錄不在top),否則絕不名具有相同的名稱作爲標準庫的本地模塊。

+0

但是,當他的圖書館被用作這樣的,他並沒有在他的'top'目錄中運行解釋器將@gonvaled行嗎? – 2013-03-13 19:06:44

+0

@MartinStone:是啊,沒有內部運行'top'意味着他會好起來的。擴大。 – 2013-03-13 19:10:25