我具有以下项目结构:
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'及其解决方法有任何见解吗?
答案 0 :(得分:2)
什么帮助了我
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}}部分中添加缺少的模块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