【问题标题】:Module Import Error with Nosetests and ToxNosetests 和 Tox 的模块导入错误
【发布时间】:2020-10-06 09:16:22
【问题描述】:

在我的项目中,我使用 tox 和鼻子测试。使用 PyCharm,我的 tox 管道完全通过了,包括所有测试。当我使用 python3 在 Ubuntu18.04 容器上执行 tox 时,它给了我以下错误:

ImportError: 没有名为“my_project”的模块

最后导致如下错误:

错误:命令 /.tox/py36/bin/nosetests 的 InvocationError(使用代码 1 退出)

my_project 是我正在测试的模块的名称,在/ 下的目录结构如下所示,我正在执行tox 的根目录:

  • 我的项目/
  • 测试/
  • tox.ini
  • setup.cfg
  • 其他文件

我的 tox.ini 如下所示:

[tox]
envlist = py36

[testenv]
commands = python3 setup.py build
           nosetests
deps = -r{toxinidir}/test-requirements.txt

我试图以不同的方式为鼻子测试命令提供项目路径,但这些都不起作用。我感兴趣的一行是tox 的初始输出:

py36安装:my_project@file:///.tox/.tmp/package/1/my_project-0.4.post52.dev256143400.zip,

这让我想到这是否是nosetests 找不到my_project 的原因。 有关详细信息,错误的堆栈跟踪如下:

错误:失败:ImportError(没有名为“my_project”的模块)

回溯(最近一次通话最后一次):
文件“/.tox/py36/lib/python3.6/site-packages/nose/failure.py”,第 39 行,在 runTest 提高 self.exc_val.with_traceback(self.tb)
loadTestsFromName 中的文件“/.tox/py36/lib/python3.6/site-packages/nose/loader.py”,第 418 行 addr.filename, addr.module)
importFromPath 中的文件“/.tox/py36/lib/python3.6/site-packages/nose/importer.py”,第 47 行 return self.importFromDir(dir_path, fqname)
importFromDir 中的文件“/.tox/py36/lib/python3.6/site-packages/nose/importer.py”,第 79 行 fh, 文件名, desc = find_module(part, path)
文件“/usr/lib/python3.6/imp.py”,第 297 行,在 find_module 中 raise ImportError(_ERR_MSG.format(name), name=name) ImportError: No module named 'my_project'

【问题讨论】:

  • my_project目录下是否有__init__.py文件?
  • 是的,my_project/ 中有一个 __init__.py
  • 经过多次尝试,问题仍未解决。我想知道我做错了什么。

标签: python-3.6 importerror nose tox


【解决方案1】:

我看到三个可能的罪犯。

(1) python3 setup.py build 不应存在于commands 部分中。

# the build command is redundant, there is a special option for this. 
commands = python3 setup.py build
           nosetests
# The install command with it's default
install_command=python -m pip install {opts} {packages}(ARGV)
deps = -r{toxinidir}/test-requirements.txt

(2) 使用 Pycharm,您可能已将项目添加为 sources root(右键单击文件夹 > 将目录标记为 > 源根目录)。或者以其他方式配置它(可能是 PATH 变量?)使my_project 在上下文中可用以在 Pycharm 中运行它?但这不应该发生在 tox 内部,除非您将外部白名单或站点包设置为 True..

因此,当安装在容器上时,此链接不存在。

(3) 我不禁注意到setup.pypyproject.toml 的缺失。用于安装my_project 的文件。例如。如果它不起作用,请在本地运行此命令并调试您的安装:

pip install .

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-14
    • 2023-03-03
    相关资源
    最近更新 更多