【问题标题】:Can't find module (__init__.py is present) and I'm copying a tutorial exactly找不到模块(__init__.py 存在),我正在完全复制教程
【发布时间】:2025-12-03 08:55:02
【问题描述】:

我看到了与此相关的其他问题,但根据我所看到的,这里没有一个适用的答案。

我有一个看起来像这样的小应用:

.
├── ds
│   ├── __init__.py
│   └── stack.py
└── tests
    └── test_stack.py

test_stack.py 有一个导入行:from ds.stack import Stackstack.py 只是创建并传递了一个名为 Stack 的类。

当在*目录(运行tree)中时,我运行python3 tests/test_stack.py,得到错误:ModuleNotFoundError: No module named 'ds'

我已经与 Discord 中的某个人进行了检查,它在他们的机器上运行......显然是运行教程的人。

我确实有一次将这个目录放在我的PYTHONPATH 中,这似乎避免了错误,但当我只是在做这样的随机小事情时,我不想这样做......根据教程和与我交谈的人,我不应该这样做。

想法?

【问题讨论】:

  • test_stack.py 上升了一级,它会工作。因为它是,它不会被发现。你可以做import os, sys/sys.path.append(os.path.realpath(os.path.dirname(__file__)+'/..'))
  • @TimRoberts 不幸的是,这正是教程中的内容。我已经确定了大约 3 个小时了。
  • 通常您从项目根目录使用测试运行器应用程序(如pytestpython -m unittest)来防止此类问题。

标签: python python-3.x python-module


【解决方案1】:

试试这个:

  • 在您的测试目录中添加 _init_.py 文件

  • 使(ds 和测试的)父目录成为当前工作目录并运行python -m tests.test_stack

现在,正如@Klaus D. 所建议的那样,要正确运行您的测试,您需要安装 pytest 之类的东西,然后运行 ​​pytest ./tests

【讨论】: