New*_*Guy 5 python pytest pathlib visual-studio-code
我最近将正在使用的 IDE 更改为 VSCode。在大多数情况下,我喜欢它,但有一个特定的问题我似乎无法解决。我也没有意识到这是一个问题,直到我移动了 IDE。
\n\n我有一个这样的目录结构:
\n\nmy_app\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 env\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 bin\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 include\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 lib\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 lib64 -> lib\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 pyvenv.cfg\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 share\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 my_app\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 expected_results\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 test_data\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 tests\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 pytest.ini\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 README.rst\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 setup.cfg\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 setup.py\n
Run Code Online (Sandbox Code Playgroud)\n\n当我启动虚拟环境时,我位于此目录结构的根目录下。
\n\n我通过发出此命令(或提供其他选项)来运行测试。目前这有效:
\n\npytest\n
Run Code Online (Sandbox Code Playgroud)\n\n但是,当 VSCode 启动时,它会抛出一个错误,指出找不到所需的文件:
\n\nE FileNotFoundError: [Errno 2] No such file or directory: \'my_app/expected_results/expected_available_items.yml\'\n
Run Code Online (Sandbox Code Playgroud)\n\n经过一番调查,我发现这是因为 VSCode 启动时会发出以下命令:
\n\npython -m pytest\n
Run Code Online (Sandbox Code Playgroud)\n\n我通过这样做来设置该路径:
\n\nimport pathlib\nEXPECTED_RESULTS_BASE = pathlib.Path("my_app/expected_results")\nexpected_results = EXPECTED_RESULTS_BASE.joinpath(\'expected_available_items.yml\')\n
Run Code Online (Sandbox Code Playgroud)\n\n我需要修改什么才能让我的测试在我发出命令时继续运行pytest
并且在我(或显然是我的 IDE)出现问题时运行python -m pytest
?
我希望可以安全地假设 VSCode 会my_app
像我一样从根部启动它?
可能没有足够的信息来直接回答这个问题,但让我们尝试一些事情:
print(os.getcwd())
print(EXPECTED_RESULTS_BASE.absolute())
Run Code Online (Sandbox Code Playgroud)
which
来查看您是否实际上正在调用不同的东西。激活 venv 之前和之后:which pytest
which python
Run Code Online (Sandbox Code Playgroud)
python -m pytest
将调用与您刚刚调用的 python 版本一起安装的 pytest 模块。如果调用的版本与您从venv 内部python
获取的版本不同,那么这可能就是问题所在。pytest
您应该能够通过查看文件顶部的 hashbang 来检查 pytest 正在调用哪个 python 版本
head -1 $(which pytest)
Run Code Online (Sandbox Code Playgroud)
在我的系统(安装了 anaconda Python 的 macOS)上,我从这些命令中得到以下内容
$ which pytest
/Users/Shannon/anaconda/bin/pytest
$ which python
/Users/Shannon/anaconda/bin/python
$ head -1 $(which pytest)
#!/Users/Shannon/anaconda/bin/python
Run Code Online (Sandbox Code Playgroud)
这告诉我,pytest
正在调用与我调用时得到的 python 版本相同的版本python
。因此,在我的默认环境中,对我来说pytest
应该python -m pytest
会产生同样的结果。
您确定 VSCode 在运行测试之前正确加载您的 venv 吗?
归档时间: |
|
查看次数: |
10654 次 |
最近记录: |