मैं nox का उपयोग कविता

जो ठीक नहीं चल रहा है वह यह है कि नोक्स सत्र में देव निर्भरता स्थापित करना।

मेरे पास 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")

मैं नोक्स सत्र में देव निर्भरता कैसे स्थापित कर सकता हूं?

6
Yohei 16 जिंदा 2020, 14:24

1 उत्तर

कुछ परीक्षणों और त्रुटियों के बाद और @ यान के उत्तर में मैंने जो टिप्पणी की, उसके विपरीत, ऐसा लगता है कि poetry VIRTUAL_ENV द्वारा पारित चर को अनदेखा करता है nox

क्लाउडियो जोलोविक्ज़ की अद्भुत श्रृंखला Hyperआधुनिक पायथन से प्रेरित होकर, मैंने हल किया निम्नलिखित के साथ समस्या:

@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 वह फ़ंक्शन है जिसे मैंने क्लाउडियो से उधार लिया था, जिसे विंडोज़ पर काम करने के लिए संपादित किया गया था:

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)
2
sanzoghenzo 18 जून 2020, 15:32