Pytest在使用tox时说'ModuleNotFoundError'

时间:2019-02-05 11:02:35

标签: python pytest tox

我具有以下项目结构:

root
|- module
  |- module.py
  |- __init__.py
|- tests
   |- unit
      |- some_test.py
   |- integration
      |- another_test.py
|- conftest.py
|- setup.py
|- tox.ini

当我运行python3 module/module.py ...时,它会按预期运行。

但是,当我执行tox时,我得到ModuleNotFoundError: No module named 'dateutil'

在我的setup.py中,我有install_requires=['python-dateutil'],tox.ini具有以下(简化的)内容:

[tox]
envlist   = py{36, 37}
skipsdist = True

[testenv]
deps = pytest
commands = pytest

有人对运行tox为何会导致我找不到模块'dateutil'及其解决方法有任何见解吗?

2 个答案:

答案 0 :(得分:2)

什么帮助了我

  1. db.collection.aggregate([ { '$unwind': { 'path': '$crop', 'preserveNullAndEmptyArrays': True } }, { '$unwind': { 'path': '$actions', 'preserveNullAndEmptyArrays': True } }, { '$group': { '_id': '$user_id', 'action_count_temp': { '$addToSet': { 'comment': '$comment', 'actions': '$actions' } }, 'crop_count_temp': { '$addToSet': { 'comment': '$comment', 'crop': '$crop' } }, 'comment': { '$addToSet': '$comment' } } }, { '$unwind': { 'path': '$action_count_temp', 'preserveNullAndEmptyArrays': True } }, { '$group': { '_id': { '_id': '$_id', 'actions': '$action_count_temp.actions' }, 'comment': { '$first': '$comment' }, 'crop_count_temp': { '$first': '$crop_count_temp' }, 'actions_count_temp': { '$sum': 1 } } }, { '$group': { '_id': '$_id.actions', 'userId': { '$first': '$_id._id' }, 'comment': { '$first': '$comment' }, 'crop_count_temp': { '$first': '$crop_count_temp' }, 'actions_count_temp': { '$first': { 'k': '$_id.actions', 'v': '$actions_count_temp' } } } }, { '$project': { '_id': '$userId', 'actions_count_temp': 1, 'comment': 1, 'crop_count_temp': 1 } }, { '$group': { '_id': '$_id', 'comment': { '$first': '$comment' }, 'crop_count_temp': { '$first': '$crop_count_temp' }, 'actions_count_temp': { '$push': '$actions_count_temp' } } }, { '$unwind': { 'path': '$crop_count_temp', 'preserveNullAndEmptyArrays': True } }, { '$group': { '_id': { '_id': '$_id', 'crop': '$crop_count_temp.crop' }, 'comment': { '$first': '$comment' }, 'actions_count_temp': { '$first': '$actions_count_temp' }, 'crop_count_temp': { '$sum': 1 } } }, { '$group': { '_id': '$_id.crop', 'userId': { '$first': '$_id._id' }, 'comment': { '$first': '$comment' }, 'actions_count_temp': { '$first': '$actions_count_temp' }, 'crop_count_temp': { '$first': { 'k': '$_id.crop', 'v': '$crop_count_temp' } } } }, { '$project': { '_id': '$userId', 'actions_count_temp': 1, 'comment': 1, 'crop_count_temp': 1 } }, { '$group': { '_id': '$_id', 'comment': { '$first': '$comment' }, 'crop_count_temp': { ' $push': '$crop_count_temp' }, 'actions_count_temp': { '$first': '$actions_count_temp' } } }, { '$project': { '_id': 1, 'comment': 1, 'action_count': { '$arrayToObject': '$actions_count_temp' }, 'crop_count': { '$arrayToObject': '$crop_count_temp' } } } ]) 的{​​{1}}部分中添加缺少的模块
  2. 删除旧的install_requires目录并重新运行setup.py

答案 1 :(得分:1)

[tox]skipsdist = True prevents tox运行python setup.py sdist,因此您的install_requires被完全忽略。

如果您真的想遵循为应用程序设置[tox]skipsdist = True的建议,还建议您遵循所有其他打包应用程序的最佳做法:使用requirements.txt并添加

[testenv]
deps =
    -rrequirements.txt

tox.ini。或者直接直接

[testenv]
deps = python-dateutil