目前我习惯pyenv
安装特定python
版本。然后我用它pipenv
为我的各种项目创建虚拟环境python
。
目前我的项目结构类似于:
foo/
src/app.py
src/__init__.py
tests/unit/test_app.py
tests/unit/__init_.py
test_app.py
导入 as 时有任意给定数量的测试app.py
:
import src.app
我有两个问题:
- 代码编辑器喜欢
emacs
,vim
或者vscode
确实抱怨import
测试中的该子句,将其标记为红色并且“适度”烦人。 - 我从文本编辑器中调用
pipenv run pytest
来检查测试。它失败,因为src
不是它可以找到的模块。如果我从项目目录中的终端调用相同的命令,我会收到相同的错误。
如果我将它作为python
模块调用pipenv run python -m pytest
,它确实可以工作,因为它将当前目录添加到PYTHONPATH
.如果我从 a 启动编辑器,pipenv shell
测试也可以工作。无论我如何启动编辑器,它import src.app
都会被标记为无效。
如果我启动编辑器设置,PYTHONPATH=$PYTHONPATH:.
测试也可以工作,但语法检查仍然会抱怨。
emacs
使用或等编辑器处理此问题最简洁的方法是什么vim
?我不想使用pycharm
和类似工具来“自动”解决此问题。
答案1
根据pipenv
文件;加载调用.env
目录中的任何文件。pipenv
这意味着(例如)当您在使用层时test_app.py
打开时,项目的 会被加载(像往常一样),但也会自动加载,并且文件的内部依赖项将起作用。emacs
python
pipenv
.env
例如,.env
在项目的根目录中使用此内容创建对我来说很有效:
PYTHONPATH=$PYTHONPATH:.
现在,您还可以直接运行单元测试,而emacs
不会遇到导入问题。
这是我能够使其工作的唯一方法,但该解决方案感觉很黑客且不优雅。