导入类问题

4 投票
3 回答
527 浏览
提问于 2025-04-16 10:40

可能是重复的问题:
基础的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)

撰写回答