不顺利的是在nox会话中安装dev依赖项。
我有如下所示的noxfile.py:
import nox
from nox.sessions import Session
from pathlib import Path
__dir__ = Path(__file__).parent.absolute()
@nox.session(python=PYTHON)
def test(session: Session):
session.install(str(__dir__)) # I want to use dev dependency here
session.run("pytest")如何在nox会话中安装dev依赖?
发布于 2020-01-25 06:02:00
目前,session.install还不支持poetry和install,只支持shell中的runs pip。您可以使用更通用的方法session.run来激活poetry。
示例:
@nox.session(python=False)
def tests(session):
session.run('poetry', 'shell')
session.run('poetry', 'install')
session.run('pytest')当您设置会话时,您可以通过自己禁用python virtualenv (python=False)的创建并使用poetry shell激活poetry的会话来完成所有操作。
发布于 2020-06-18 23:32:36
在经历了一些尝试和错误之后,与我在@Yann的答案中所评论的相反,poetry似乎忽略了nox传递的VIRTUAL_ENV变量。
受Claudio Jolowicz的精彩系列Hypermodern Python的启发,我用以下方法解决了这个问题:
@nox.session(python=PYTHON)
def test(session: Session) -> None:
"""
Run unit tests.
Arguments:
session: The Session object.
"""
args = session.posargs or ["--cov"]
session.install(".")
install_with_constraints(
session,
"coverage[toml]",
"pytest",
"pytest-cov",
"pytest-mock",
"pytest-flask",
)
session.run("pytest", *args)在这里,我只是使用pip安装一个PEP517包。
不幸的是,通过pip安装的PEP517不支持可编辑("-e")开关。
仅供参考:install_with_constraints是我从Claudio借来的函数,经过编辑后可以在Windows上运行:
def install_with_constraints(
session: Session, *args: str, **kwargs: Any
) -> None:
"""
Install packages constrained by Poetry's lock file.
This function is a wrapper for nox.sessions.Session.install. It
invokes pip to install packages inside of the session's virtualenv.
Additionally, pip is passed a constraints file generated from
Poetry's lock file, to ensure that the packages are pinned to the
versions specified in poetry.lock. This allows you to manage the
packages as Poetry development dependencies.
Arguments:
session: The Session object.
args: Command-line arguments for pip.
kwargs: Additional keyword arguments for Session.install.
"""
req_path = os.path.join(tempfile.gettempdir(), os.urandom(24).hex())
session.run(
"poetry",
"export",
"--dev",
"--format=requirements.txt",
f"--output={req_path}",
external=True,
)
session.install(f"--constraint={req_path}", *args, **kwargs)
os.unlink(req_path)发布于 2021-09-05 00:32:35
我想使用不带poetry的nox会话,所以我使用poetry为session.install()生成参数,如下所示:
@nox.session
def tests(session: nox.sessions.Sessio0n):
""" Run all tests """
session.install(*requirements_txt, '.', 'pytest')
session.run('pytest', 'tests/')
# Get requirements.txt from poetry
import tempfile, subprocess
with tempfile.NamedTemporaryFile('w+') as f:
subprocess.run(f'poetry export --no-interaction --dev --format requirements.txt --without-hashes --output={f.name}', shell=True, check=True)
f.seek(0)
requirements_txt = f.readlines()https://stackoverflow.com/questions/59768651
复制相似问题