我有以下项目结构:
project/
example/
__init__.py
foo.py
boo.py
meh.py
tests/
example/
test_foo.py
test_boo.py
test_meh.py
作为例子,我进口foo.py
的boo.py
作为import example.foo as f
。我正在python3 -m pytest -s -v --cov tests
根文件夹(项目)上运行测试。单元测试运行得非常顺利,但是当我尝试运行单个文件时python3 example/boo.py
出现错误:
ModuleNotFoundError: No module named 'example'
包中的模块不应真正运行(某些例外)。
但是,如果您确实需要,可以在运行模块之前设置PYTHONPATH。对于一个,使用例如
PYTHONPATH=$(pwd) python3 example/boo.py
一种替代方法是使用相对导入:from . import foo as f
inside boo.py
。但这仍然意味着不应真正运行模块。
详细说明:应该导入一个模块,而不是像脚本一样运行。那就是模块的目的。如果出于某种原因,您确实确实确实需要执行模块,则1 /重新考虑,2 /重写模块,3 /通过在模块内部调用必要的函数将脚本包装在模块周围(并保留模块脚本本身相对较短)。
请注意,setuptools
通过入口点已经具有此功能。
一个更简单的选择是使用适当的
if __name__ == '__main__':
main()
在模块末尾的一行,其中main()
调用了模块功能,然后使用Python-m
开关执行该模块:
python -m mypackage.mymodule
但是,再次尝试限制此功能。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句