OSX上的Python绝对导入

时间:2014-05-25 07:56:14

标签: python macos import

以下哪种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无效

1 个答案:

答案 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 - 如果你想知道,你不能用它们来导入阴影模块。