测试人社区

pytest报错ModuleNotFoundError——关于Python Package

问题已解决。教训是每个python package里面都需要加__init__.py

关键词

  • Hint: make sure your test modules/packages have valid Python names.
  • ModuleNotFoundError
  • 移动了项目位置

错误信息

=========================================================================== 1 error in 0.11s ============================================================================
(venv) ➜  xueqiu git:(master) ✗ pytest testcase/test_main.py 
========================================================================== test session starts ==========================================================================
platform darwin -- Python 3.7.7, pytest-5.4.2, py-1.8.1, pluggy-0.13.1
rootdir: /Users/zhengbangbo/Desktop/xueqiu
collected 0 items / 1 error                                                                                                                                             

================================================================================ ERRORS =================================================================================
________________________________________________________________ ERROR collecting testcase/test_main.py _________________________________________________________________
ImportError while importing test module '/Users/zhengbangbo/Desktop/xueqiu/testcase/test_main.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
testcase/test_main.py:4: in <module>
    from page.app import App
E   ModuleNotFoundError: No module named 'page'
======================================================================== short test summary info ========================================================================
ERROR testcase/test_main.py
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Interrupted: 1 error during collection !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
=========================================================================== 1 error in 0.11s ============================================================================

我的目录结构

image

可以看到我是有page.app这个模块的,就是不知道为什么pytest报错说发现不了?

找到但没用的解决方案

  1. 执行 pytest 时报错 Hint: make sure your test modules/packages have valid Python names. · TesterHome

说是「重建工程」,但是我 File -> Invalidate Cache / Restart... 之后还是一样出错。

  1. pytest: ModuleNotFoundError: No module named ‘requests’

说是pytest存在一些问题,导致他会找虚拟环境以外的包。但是我找了一下,并不存在有叫page的包在外面。

(venv) ➜  xueqiu git:(master) ✗ pip3 uninstall page
WARNING: Skipping page as it is not installed.
(venv) ➜  xueqiu git:(master) ✗ pip uninstall page
WARNING: Skipping page as it is not installed.
➜  ~ pip3 uninstall page
WARNING: Skipping page as it is not installed.
➜  ~ pip uninstall page
WARNING: Skipping page as it is not installed.

我还修改了activate

因为怀疑是我的虚拟环境的问题,我去查了下我的虚拟环境的VIRTUAL_ENV。之前我把工程换了一个路径,导致这里存在问题一个BUG使得我的虚拟环境没有生效。然后我通过修改venv/bin/activate文件修改好了。

VIRTUAL_ENV="/Users/zhengbangbo/Desktop/xueqiu/venv"

可能是修好了部分问题,但是ModuleNotFoundError依旧。

所以实在是摸不着头脑,我猜想这个和环境的一些配置有关,但是要怎么解决呢?

想了一下,可能是你page文件夹下没有__init__.py所以没有认为是一个Python的包,你建文件夹的时候这种需要引用的文件夹尽量建python包 会自带这个文件

import sys
sys.path.append('..')

可以考虑在导入前加上这么两行,将上级目录加入path变量,这样查找包的时候就能从上级目录找了,就能找到你这个目录
另外你可以试试 右键点击你项目名 有个
image
好像也行


两种方式都试了,都没有用

虚拟环境的环境变量


情景再现了一下 执行通过没有报错。。不知道是什么问题了~

https://stackoverflow.com/questions/48532134/python-code-runs-from-ide-but-not-from-terminal/48547472#48547472 这个帖子也是给的类似的解决方案,不知道为什么你那边不好使。。

今天我又重新创建了这个项目,结果成功了!唯一不同的是这个Cases文件夹里面添加了一个__init__.py
image
之前我加__init__.py的时候就唯独没加Cases文件夹里面,可真是太蠢了!
image

我以后一定牢记要在每个目录下加__init__.py的规则,这好像也是IDE判断一个文件夹是不是Python Package的依据。

感谢天马大佬!