OSX上的Python绝对导入

OSX上的Python绝对导入,python,macos,import,Python,Macos,Import,以下哪种Python 2.7导入场景是正确的?i、 e.如果我有一个名称隐藏的模块,则stdlib模块应该导入导入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", "cop

以下哪种Python 2.7导入场景是正确的?i、 e.如果我有一个名称隐藏的模块,则stdlib模块应该
导入
导入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,使用from
\uuuuuuuuuuuuuuuuuuu future\uuuuuuuuu import
没有任何效果

您的当前路径通常会附加在列表的第一个位置
sys.path
。这意味着您将始终导入自定义模块

如果您不想这样做,那么可以尝试在
python-E
模式下启动解释器。这不会将当前路径添加到
sys.path
,您将加载默认模块

导入全局模块的另一种方法是进行一些修改

import os

temp_path = os.getcwd()
os.chdir('/some/other/path')

import myshadowingmodule
os.chdir(temp_path)
这使您在导入时似乎位于不同的目录中,导入后,会将您带回原来的位置


另外还有两个函数
\uuuu import\uuuu
importlib.import\u module
-如果您想知道,您不能使用它们来导入隐藏的模块。

您确定两个操作系统的python路径中都包含了您的模块吗?在第一个示例中,您没有cd到
~/tmp
?那里有一个
\uuuu init\uuuuuuuuuy.py
吗?为什么要使用同名的模块?@padraiccningham我想问题的关键是,两个同名模块中的哪一个会/应该被选中。不幸的是,在不同的目录中运行
ls
python
似乎会混淆问题。在复制和粘贴过程中遗漏了一点。
ls
python
都是从同一个目录
tmp
运行的,否则
cat
将无法工作。