我有这个结构的项目:
project_folder:
__init__.py
classes_folder:
__init__.py
class1.py
class2.py
tests_folder:
__init__.py
test1.py
现在我需要在class1.py
中导入test1.py
。我怎么能这样做?
答案 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