python - 运行 pytest 时如何让 VSCode 正确激活 conda?
问题描述
在 Windows 10 上使用 Anaconda 和 VSCode 时,VSCode 调试器会在我运行/调试时正确激活环境。但是当我使用测试模块时,它失败了。
这是一个示例设置:
我使用以下命令创建环境:conda create -n sqlite_test python=3.7.3
我的文件夹设置如下:
./src/
sql.py
test_sql.py
我打开一个新的 VSCode 窗口,然后打开src
文件夹。
sql.py 的源代码是:
import sqlite3
import os
def do_sql():
db_path = os.path.join(os.environ['TEMP'], 'test.db')
conn = sqlite3.connect(db_path)
print("SQL code ran successfully")
return True
do_sql()
test_sql.py 的源代码是:
import pytest
from sql import do_sql
def test_do_sql():
assert do_sql()
在 VSCode 中,我在我的sqlite_test
Conda 环境中选择了 python 解释器。
如果我只运行 sql.py,则不会出现任何错误,并且 print 语句会打印到控制台。
如果我使用 VSCode 从 pytest 运行测试(VSCodesqlite_test
使用 Pip 将 pytest 安装到环境中),则会收到以下错误:
________________________ ERROR collecting test_sql.py _________________________
ImportError while importing test module 'c:\Users\UserName\Documents\src\tmp\sqllite\test_sql.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
test_sql.py:2: in <module>
from sql import do_sql
sql.py:1: in <module>
import sqlite3
..\..\..\..\Anaconda3\envs\sqllite\lib\sqlite3\__init__.py:23: in <module>
from sqlite3.dbapi2 import *
..\..\..\..\Anaconda3\envs\sqllite\lib\sqlite3\dbapi2.py:27: in <module>
from _sqlite3 import *
E ImportError: DLL load failed: The specified module could not be found.
!!!!!!!!!!!!!!!!!!! Interrupted: 1 errors during collection !!!!!!!!!!!!!!!!!!!
如果我从命令行运行 pytest(激活我的 conda 环境),我会成功通过测试:
>pytest
================================================= test session starts =================================================
platform win32 -- Python 3.7.3, pytest-5.0.1, py-1.8.0, pluggy-0.12.0
rootdir: C:\Users\UserName\Documents\src\tmp\sqllite
collected 1 item
test_sql.py . [100%]
============================================== 1 passed in 0.04 seconds ===============================================
解决方案
推荐阅读
- amazon-web-services - AWS ECS CloudFormation 无法使用服务发现注册表创建服务
- bitcoinj - 如何使用 bitcoinj 和其他一些 c 程序离线签署比特币交易
- java - 使用 Spring Data JPA 从 MS SQL 中选择 Top 1 记录
- javascript - 对动态创建的元素进行分组
- html - 响应式浮动内的垂直和水平中心
- c# - 检查窗口是否已经打开 MVVM
- php - Laravel 包创建
- c++ - C++:如何将 unique_ptr 推送到双端队列?
- python - 在 pandas 数据框上同时应用过滤器并替换同一列
- php - 为什么会出现此错误“无效或意外令牌”?