以下哪种Python 2.7导入方案是正确的?即如果我有一个名为shadowing stdlib模块的模块,import <module>
导入stdlib或本地版本?
在Linux上
$ ls
__init__.py time.py
~/tmp $ cat time.py
def a():
print(¨a¨)
~/tmp $ python
Python 2.7.4 (default, Sep 26 2013, 03:20:26)
[GCC 4.7.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import time
>>> dir(time)
['__doc__', '__name__', '__package__', 'accept2dyear', 'altzone', 'asctime', 'clock', 'ctime', 'daylight', 'gmtime', 'localtime', 'mktime', 'sleep', 'strftime', 'strptime', 'struct_time', 'time', 'timezone', 'tzname', 'tzset']
和OSX
sdk$ ls
__init__.py time.py time.pyc
$ cat time.py
def a():
print("a")
$ python
Python 2.7.6 (default, Apr 9 2014, 11:48:52)
[GCC 4.2.1 Compatible Apple LLVM 5.1 (clang-503.0.38)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import time
>>> dir(time)
['__builtins__', '__doc__', '__file__', '__name__', '__package__', 'a']
PS:Windows似乎遵循Linux并且使用__future__ import absolute_import
无效
答案 0 :(得分:1)
您当前的路径通常会附加在列表sys.path
的第一个位置。这意味着您将始终导入自定义模块。
如果您不想这样,那么您可以尝试以python -E
模式启动解释器。这不会添加sys.path
的当前路径,并且您将加载默认模块。
导入全局模块的另一种方法是做一点破解
import os
temp_path = os.getcwd()
os.chdir('/some/other/path')
import myshadowingmodule
os.chdir(temp_path)
这使得您在导入时看起来处于不同的目录中,导入后会将您带回到原来的位置
还有2个函数__import__
和importlib.import_module
- 如果你想知道,你不能用它们来导入阴影模块。