目前,我使用pyenv安装特定的python版本。然后,我使用pipenv为python中的各种项目创建虚拟环境。
目前,我有一个类似于:
foo/
src/app.py
src/__init__.py
tests/unit/test_app.py
tests/unit/__init_.py在test_app.py中有任意给定数量的测试将app.py导入为:
import src.app我有两个问题:
emacs、vim或vscode这样的代码编辑器确实抱怨测试中的import子句,将其标记为红色,并且“适度”恼人。pipenv run pytest来检查测试。它失败了,因为src不是它可以找到的模块。如果我从项目目录中的终端调用相同的命令,就会得到相同的错误。如果我以python模块的形式调用它,比如pipenv run python -m pytest,它就会工作,因为它将当前目录添加到PYTHONPATH中。如果我从一个pipenv shell启动编辑器,那么测试也能工作。无论我如何启动编辑器,import src.app都被标记为无效。
如果启动编辑器设置PYTHONPATH=$PYTHONPATH:.,那么测试也会正常工作,但是语法检查仍然会出现问题。
对于像emacs或vim这样的编辑器,最干净的处理方法是什么?我不想转移到pycharm和类似的工具“自动”解决这个问题。
发布于 2019-11-27 14:23:12
根据pipenv文档,调用pipenv的目录中的任何.env文件都会被加载。
这意味着(例如)当您在使用test_app.py层时在emacs中打开python时,将加载项目的pipenv (与往常一样),但是.env也会自动加载,并且文件的内部依赖关系也会正常工作。
因此,例如,在项目的根上创建具有此内容的.env对我来说是可行的:
PYTHONPATH=$PYTHONPATH:.现在,您还可以直接从emacs运行单元测试,而不会遇到导入方面的问题。
这是我唯一能让它发挥作用的方法,但这个解决方案让我感觉到了骇人听闻和不雅的感觉。
https://unix.stackexchange.com/questions/554241
复制相似问题