导入类问题

时间:2011-01-26 16:44:29

标签: python

  

可能重复:
  Basic Python imports question

我有这个结构的项目:

project_folder:
    __init__.py
    classes_folder:
        __init__.py
        class1.py
        class2.py
    tests_folder:
        __init__.py
        test1.py

现在我需要在class1.py中导入test1.py。我怎么能这样做?

3 个答案:

答案 0 :(得分:2)

假设PYTHONPATH=.并且您位于project folder然后......

import classes_folder.class1

通过“找到”我的意思是你从project folder运行python。

这一切都与你的PYTHONPATH有关。考虑到这一点。

因此,如果您位于project folder/tests_folder以避免问题,则PYTHONPATH绝对是您项目的根目录:

export PYTHONPATH=/full/path/to/project_folder

然后,当您从其他文件夹启动测试时,您将不会遇到任何问题。

编辑以回答有关在运行时更改python路径的注释

import sys
sys.path.append("/full/path/to/project_folder")

甚至更好,你可以根据你执行python ...

的位置来做到这一点
import sys,os
home_project=os.path.abspath(".")
sys.path.append(home_project)

答案 1 :(得分:1)

from ..classes_folder import class1

示例:

$ ls -R root
root:
foobar/  tests/  __init__.py

root/foobar:
__init__.py  mod.py

root/tests:
__init__.py  test1.py

$ cat root/foobar/mod.py; echo '###'; cat root/tests/test1.py
print "running", __name__
###
from ..foobar import mod

$ python -m root.tests.test1
running root.foobar.mod

答案 2 :(得分:1)

您可以将以下代码添加到classes_folder/__init__.py

__all__ = ['class1', 'class2']

然后在你的测试中(test_folder/test1.py):

from classes_folder import *

这种方式test1.py将覆盖classes_folder

中的所有课程