我正在创建一个像这样的个人工具库
utils/
__init__.py
os.py
sys.py
string.py
collections.py
我故意选择这些名字。
如果在任何这些模块中我想导入具有相同名称的标准库模块,我遇到了问题。例如,在我的collections.py
中,我想要
import collections
我希望这是标准库collections
。麻烦的是
它会自行导入,即utils.collections
,例如
import string
将导入utils.string
等
有没有解决这个问题的方法?在这种情况下,推荐修改sys.path
是推荐的解决方案。但是,对于utils
中我首先执行的每个模块
import sys
这将导入utils.sys
而不是我需要的sys
。所以我又被卡住了。
答案 0 :(得分:1)
最好的解决方案是首先防止这些名称冲突。但是,由于您可能已经超过了这一点(或者仅仅因为其他原因而必须使用这些名称),您可能不得不考虑使用Python 3.x' absolute_import
代替:
from __future__ import absolute_import
import collections # imports collections that is on sys.path
from . import collections as utils_collections # now imports utils.collections
默认情况下,Python 2.x会在搜索sys.path
之前搜索您的包。不幸的是,除了我上面说明的路线之外,在你的情况下除此之外没办法。
sys.path
中的绝对目录,除非前面有一个点。