我正在尝试学习如何创建 pkg 和测试。我研究发现,为了测试,您创建一个单独的文件夹
power_decos/
├── pytest_cache/
├── venve/
├── 装饰器/
│ ├──| ||init .py │ ├── 装饰器1.py
| ├── 装饰器2.py
├── 测试/
├──
init .py │ ├──decorator1_test.py
我在decorator1_test中运行 fromdecorators importdecorator1 当我运行它时,它给了我“找不到名为装饰器的模块”
我询问了chatgpt,但他无法帮助我。我也在 github 中查找了示例,但没有找到(至少我能理解)
我希望它导入装饰器 pkg
i am excpecting it to import the decorators pkg
在尝试从测试目录导入
decorators
包时遇到了常见的 Python 导入问题。以下是问题所在以及如何解决:
问题根源:
Python 默认情况下不将子目录自动视为可导入的包。当尝试从
tests/decorator1_test.py
导入时,Python 不知道在哪里找到
decorators
。
解决方案:
可以通过几种方式解决此问题:
-
创建包结构:
-
在
power_decos
文件夹中创建一个名为__init__.py
的空文件。这将告诉 Python 将power_decos
视为一个包。 -
现在,可以使用相对导入:
python # 在 tests/decorator1_test.py 中 from ..decorators import decorator1
-
..
表示要上升一级目录(从tests
到power_decos
) -
然后,可以从
decorators
包中导入decorator1
。
-
-
修改 Python 路径:
-
在的测试文件中,可以临时修改 Python 路径以包含
power_decos
目录:```python import sys import os sys.path.append(os.path.abspath(os.path.join(os.path.dirname( file ), '..')))
from decorators import decorator1 ```
-
这段代码获取当前文件 (
decorator1_test.py
) 的路径,向上移动一级,并将该路径添加到sys.path
。
-
这段代码获取当前文件 (
推荐方法:
第一种方法(创建包结构)通常是更简洁、更易于维护的方法。它明确地将的项目组织为一个包,并允许使用相对导入。
其他提示:
-
确保的测试文件以
test_
开头,以便 pytest 可以自动发现它们。 - 考虑使用虚拟环境来管理的项目依赖项,这可以防止版本冲突。
通过这些调整,应该能够成功地从测试文件导入
decorators
包中的函数和类。