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

标签 python package 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 作为我的包名称。

最佳答案

Python没有top.io中查找。

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

永远不要在包的内部运行Python解释器(因此请确保当前工作目录不在top中),否则永远不要命名具有与标准库同名。

关于python - 如何在库中使用冲突的命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15394071/

相关文章:

python - 有没有一种有效的方法来比较两个不同大小的数据帧?

ember.js - Ember 包.json : dependencies vs devDependencies

java - 如何将没有aspectj文件的roo项目打包成jar

java - 如何访问私有(private)包类的公共(public)成员?

python - 没有名为 _sqlite3 的模块

python : How to access file from different directory

Python共享库: RTLD_GLOBAL segfault

python - python中如何匹配不同写法的键名?

python - 获取语​​法错误: if len(sys.argv) =! 5 no clue why the code is wrong [closed]

python - Seaborn 箱线图单个箱间距