当前位置: 首页 > 知识库问答 >
问题:

pytest不能导入模块,而python可以

羊舌庆
2023-03-14

我正在用Python开发一个包。我使用虚拟环境。我在我的虚拟环境中的. pth路径中设置了模块的根路径,这样我就可以在开发代码和进行测试的同时导入包的模块(问题1:这是一个好html" target="_blank">方法吗?)。这工作正常(这里有一个例子,这是我想要的行为):

(VEnvTestRc) zz@zz:~/Desktop/GitFolders/rc$ python
Python 2.7.12 (default, Jul  1 2016, 15:12:24) 
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from rc import ns
>>> exit()
(VEnvTestRc) zz@zz:~/Desktop/GitFolders/rc$ python tests/test_ns.py 
issued command: echo hello
command output: hello

但是,如果我尝试使用PyTest,则会收到一些导入错误消息:

(VEnvTestRc) zz@zz:~/Desktop/GitFolders/rc$ pytest
=========================================== test session starts ============================================
platform linux2 -- Python 2.7.12, pytest-3.0.5, py-1.4.31, pluggy-0.4.0
rootdir: /home/zz/Desktop/GitFolders/rc, inifile: 
collected 0 items / 1 errors 

================================================== ERRORS ==================================================
________________________________ ERROR collecting tests/test_ns.py ________________________________
ImportError while importing test module '/home/zz/Desktop/GitFolders/rc/tests/test_ns.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
tests/test_ns.py:2: in <module>
    from rc import ns
E   ImportError: cannot import name ns
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Interrupted: 1 errors during collection !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
========================================= 1 error in 0.09 seconds ==========================================
(VEnvTestRc) zz@zz:~/Desktop/GitFolders/rc$ which pytest
/home/zz/Desktop/VirtualEnvs/VEnvTestRc/bin/pytest

我有点困惑,看起来这表明了一个导入错误,但是Python做得很好,那么为什么PyTest会有问题呢?对原因/补救措施(问题2)有何建议?我在谷歌上搜索了PyTest的“ImportError:cannotimport”错误,堆栈溢出,但我得到的点击与缺少python路径有关,并对此进行了补救,这似乎不是这里的问题。有什么建议吗?

共有3个答案

丌官嘉良
2023-03-14

我只是通过删除项目根目录中的__init__. py来解决这个问题:

.
├── __init__.py <--- removed
├── models
│   ├── __init__.py
│   ├── address.py
│   ├── appointment.py
│   └── client.py
├── requirements.txt
├── setup.cfg
├── tests
│   ├── __init__.py
│   ├── models
│   │   ├── __init__.py
│   │   ├── appointment_test.py
│   │   └── client_test.py
│   └── other_test.py
└── script.py
马涵蓄
2023-03-14

我不能说我理解为什么这个工作原理,但是我有同样的问题,如果我运行python-m pytest,测试工作正常。

我在一个虚拟环境中,pytest也可以在全球范围内使用:

(proj)tom@neon ~/dev/proj$ type -a python
python is /home/tom/.virtualenvs/proj/bin/python
python is /usr/bin/python

(proj)tom@neon ~/dev/proj$ python -V
Python 3.5.2

(proj)tom@neon ~/dev/proj$ type -a pytest
pytest is /home/tom/.virtualenvs/proj/bin/pytest
pytest is /usr/bin/pytest

(proj)tom@neon ~/dev/proj$ pytest --version
This is pytest version 3.5.0, imported from /home/tom/.virtualenvs/proj/lib/python3.5/site-packages/pytest.py
龚国源
2023-03-14

找到了答案:

不要将\uuuu放入初始化。如果您计划使用pytest,请将py文件放在包含测试的文件夹中。我有一个这样的文件,删除它解决了问题。

这实际上被pytest“ImportError:没有名为YadaYadaYada的模块”的路径问题第二个答案的注释所掩盖,所以我没有看到它,希望它在这里更具可见性。

 类似资料:
  • 问题内容: 我正在编写pytest插件,该插件应测试旨在在一组特定环境中运行的软件。 我正在编写的软件在一个更大的框架内运行,这使某些Python模块仅在框架内运行我的Python软件时可用。 为了测试我的软件,我需要“模拟”或伪造整个模块(实际上是很多模块)。我需要以某种类似的方式实现其功能,但是我的问题是,如何使用py.test插件将该虚假的Python模块提供给我的软件代码? 例如,假设我的

  • 我需要在Python中导入一个名为array_queue的模块。我检查了一下,如果我不使用它,就会出现一个提示:“array_queue imported but unused”。但是,如果我使用它并运行该程序,则会出现以下情况: ModuleNotFounderRror:没有名为“array_queue”的模块

  • 问题内容: 在复杂的应用程序中,我需要导入用户提供的“脚本”。理想情况下,脚本应具有 所以我只是 然而,大家都知道,用户的脚本 执行 尽快运行。这意味着脚本可以是这样的: 脚本一经产生就被调用。 我需要的是一种方法: 首先检查它是否具有init(),execute()和cleanup() 如果它们存在,一切都会很好 如果不存在,抱怨 不要运行任何其他代码,或者至少不要运行,直到我知道没有init(

  • 我想对GitHub上的一个公共项目做些改变(如果有好处的话,可能会有所贡献)。我已经分支并克隆了模块,但我不清楚如何让我的程序导入本地库,而不是“官方”安装的模块。 我尝试将它克隆到我的项目文件夹中,但是当我导入它并尝试使用它时,事情变得很奇怪 我还尝试了做<code>sys.path。附加和文件夹位置。但它似乎仍然进口官方的,而不是分叉的。 我假设我可以把我的程序放在模块文件夹中,这样模块会先被

  • 问题内容: 我遵循pytest的良好做法,或者至少我 认为自己是 。但是,pytest找不到我的模块。它似乎没有在其中包含当前目录。 源文件: 测试文件: 并使用称为“ p3”的Python 3虚拟环境输出shell。 但是,运行以下命令确实可以正常工作。 我究竟做错了什么? 问题答案: 只需将一个空文件放在项目根目录中: 您的项目结构应变为: 此处发生的情况:发现a时,它将进行修改,以便可以从c

  • 主要内容:import 模块名 as 别名,from  模块名 import 成员名 as 别名使Python 进行编程时,有些功能没必须自己实现,可以借助 Python 现有的标准库或者其他人提供的第三方库。比如说,在前面章节中,我们使用了一些数学函数,例如余弦函数 cos()、绝对值函数 fabs() 等,它们位于 Python 标准库中的 math(或 cmath)模块中,只需要将此模块导入到当前程序,就可以直接拿来用。 前面章节中,已经看到使用 import 导入模块的语法,但实际上