导入类问题
可能是重复的问题:
基础的Python导入问题
我有一个这样的项目结构:
project_folder:
__init__.py
classes_folder:
__init__.py
class1.py
class2.py
tests_folder:
__init__.py
test1.py
现在我需要在 test1.py
中导入 class1.py
。我该怎么做呢?
3 个回答
1
你可以在 classes_folder/__init__.py
文件中添加以下代码:
__all__ = ['class1', 'class2']
然后在你的测试文件中(test_folder/test1.py
):
from classes_folder import *
这样一来,test1.py
就可以访问到 classes_folder
中的所有类了。
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
假设你的 PYTHONPATH=.
,并且你在 项目文件夹
中,那么 ...
你可以使用 import classes_folder.class1
来导入类。
这里的“位于”是指你是在 项目文件夹
中运行 Python 的。
这一切都和你的 PYTHONPATH
有关,记得考虑这一点。
所以,如果你在 项目文件夹/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)