在不更改sys.path的情况下控制python中导入的顺序
我正在创建一个像这样的个人实用程序库在不更改sys.path的情况下控制python中导入的顺序,python,python-2.7,Python,Python 2.7,我正在创建一个像这样的个人实用程序库 utils/ __init__.py os.py sys.py string.py collections.py 我故意选择那些名字 如果在这些模块中的任何一个模块中,我想要导入具有相同名称的标准库模块,我就会遇到一个问题。例如,在我的collections.py中,我想 import collections 我希望这是标准库集合。问题是 这会导入自身,即utils.collections和 import
utils/
__init__.py
os.py
sys.py
string.py
collections.py
我故意选择那些名字
如果在这些模块中的任何一个模块中,我想要导入具有相同名称的标准库模块,我就会遇到一个问题。例如,在我的collections.py
中,我想
import collections
我希望这是标准库集合
。问题是
这会导入自身,即utils.collections
和
import string
将导入utils.string
,等等
有办法解决这个问题吗?大概在这种情况下,修改sys.path
是推荐的解决方案。但是,对于utils
中的每个模块,这将要求我首先执行
import sys
这将导入
utils.sys
,而不是我需要的sys
。所以我又被卡住了。最好的解决办法是首先防止这些名称冲突。但是由于您可能已经超过了这一点(或者仅仅是因为其他原因必须使用这些名称),所以您可能需要考虑使用Python 3。x的代码> AbvestTyPurial< <代码> >:
from __future__ import absolute_import
import collections # imports collections that is on sys.path
from . import collections as utils_collections # now imports utils.collections
默认情况下,Python2.x将在搜索sys.path
之前搜索您的包。不幸的是,在你的情况下,除了我上面介绍的路线之外,没有其他方法可以绕过这一点
另一方面,Python3.x默认情况下将搜索
sys.path
中的绝对目录,除非前面有一个前导点。抱歉,错误地编辑了您的文章。非常有用。Python2.x和3.x中导入之间的差异对我来说从来都不是很清楚。“我还是有点困惑,但现在不那么困惑了。”安德鲁斯很乐意帮忙!是的,2.x版和3.x版的进口产品之间存在显著差异。我现在正在文档中寻找完整的解释,尽管这可能是问题的一部分@我想我现在就可以找到。如果你仍然感兴趣,我希望它能帮助你!再次感谢。马克·卢茨的那本书很有帮助。它解释了我所缺少的一些微妙之处。@mjandrews太棒了!很高兴这有帮助。