python从子目录导入

时间:2014-10-30 08:14:18

标签: python python-2.7

我有以下目录:

|-- project
|   |-- __init__.py
|   |-- proj1
|   |   |-- file.py
|   |   |-- file.py~
|   |   `-- __init__.py
|   `-- proj2
|       |-- call.py
|       |-- call.py~
|       `-- __init__.py

call.py有:

from proj1.file import hello

hello('nishant')

file.py有。

def hello(arg):
    print 'hello ,' + arg

当我试图在项目目录之外调用时 python project/proj2/call.py我得到导入错误:没有名为proj1.file的模块

任何想法......?

2 个答案:

答案 0 :(得分:0)

这是因为导入是相对于PATH环境变量中的路径(或python中的sys.path)。默认情况下,此var仅包含当前目录,即您运行的目录。

project目录中运行您的项目:python proj2/call.py

或者,您可以在执行导入之前将项目根目录附加到sys.path

import sys
sys.path.append(YOUR_PROJECT_ROOT)

答案 1 :(得分:0)

请注意,call.pyfile.py不在同一路径中,因此您需要将prog1添加到call.py的路径..

import sys ,os
path = os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))
if not path in sys.path:
    sys.path.insert(1, path)
del path