Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在不更改sys.path的情况下控制python中导入的顺序_Python_Python 2.7 - Fatal编程技术网

在不更改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太棒了!很高兴这有帮助。