2012-04-09 39 views
2

如果我有以下目录结构:如何导入一个python文件的父目录

parent/ 
    - __init__.py 
    - file1.py 
    - child/ 
     - __init__.py 
     - file2.py 

在文件2,我怎么会导入文件1?

更新

>>> import sys 
>>> sys.path.append(sys.path.append('/'.join(os.getcwd().split('/')[:-2]))) 
>>> import parent 
>>> ImportError: No module named parent 

回答

5

你需要指定家长和它需要的sys.path

import sys 
sys.path.append(path_to_parent) 
import parent.file1 
+0

我试过这个[见上面修改的问题],但似乎仍然遇到同样的问题。 – David542 2012-04-09 19:26:16

+0

是你的树结构中的一个输入错误,你需要'__init __。py',而不是'__。init __。py' – Intra 2012-04-09 19:46:36

+1

-1:sys.path这种情况下不应该使用hacks。普通的绝对/相对进口就足够了 – jfs 2012-10-13 03:50:26

5

你仍然需要提及父母,因为他们在不同的命名空间:

import parent.file1 
+0

即使当我提到父母,我仍然会得到相同的导入错误。 – David542 2012-04-09 19:09:18

+0

@ David542显然,父目录需要在sys.path中。 – Jiri 2012-04-09 19:11:39

+0

@Jiri我尝试过[见上面修改的问题],但似乎仍然遇到同样的问题。 – David542 2012-04-09 19:26:37

-1

这是我导入任何内容的东西。当然,你仍然需要将这个脚本复制到本地目录,导入它,并且你需要的路径是use

import sys 
import os 

# a function that can be used to import a python module from anywhere - even parent directories 
def use(path): 
    scriptDirectory = os.path.dirname(sys.argv[0]) # this is necessary to allow drag and drop (over the script) to work 
    importPath = os.path.dirname(path) 
    importModule = os.path.basename(path) 
    sys.path.append(scriptDirectory+"\\"+importPath)  # Effing mess you have to go through to get python to import from a parent directory 

    module = __import__(importModule) 
    for attr in dir(module): 
     if not attr.startswith('_'): 
      __builtins__[attr] = getattr(module, attr) 
相关问题