mypy 在 github 操作上抛出“缺少泛型类型“Group”的类型参数”,但不在本地

问题描述 投票:0回答:1

在使用 pygame 的项目中,我使用 1.7.0 版本的 mypy 通过

--strict
选项进行静态类型检查。

我还设置了一个 GitHub 操作,以便在拉取请求期间运行 mypy,并使用以下工作流程文件:

name: Mypy

on:
  pull_request:
    branches: [main]

jobs:
  build-linux:
    runs-on: ubuntu-latest
    strategy:
      max-parallel: 5

    steps:
    - uses: actions/checkout@v3
    - name: Set up Python 3.10
      uses: actions/setup-python@v3
      with:
        python-version: '3.10'
    - name: Add conda to system path
      run: |
        # $CONDA is an environment variable pointing to the root of the miniconda directory
        echo $CONDA/bin >> $GITHUB_PATH
    - name: Install dependencies
      run: |
        conda env update --file environment.yaml --name base
    - name: Run static type checking
      run: |
        mypy --strict .

mypy 在我的本地计算机上没有显示任何问题,但在 GitHub 操作中运行时抛出这些错误:

othellia/sprites.py:46: error: Missing type parameters for generic type "Group"  [type-arg]
othellia/sprites.py:102: error: Missing type parameters for generic type "Group"  [type-arg]
othellia/sprites.py:164: error: Missing type parameters for generic type "Group"  [type-arg]
Found 3 errors in 1 file (checked 20 source files)
Error: Process completed with exit code 1.

这里是有问题的

sprites.py
文件:

import numpy as np
import pygame

from settings.colors import (
    BLACK_PIECE_COLOR,
    CELL_COLOR,
    ENDGAME_MESSAGE_BACKGROUND_COLOR,
    ENDGAME_MESSAGE_BLACK_VICTORY_COLOR,
    ENDGAME_MESSAGE_DRAW_COLOR,
    ENDGAME_MESSAGE_WHITE_VICTORY_COLOR,
    INDICATOR_COLOR,
    WHITE_PIECE_COLOR,
)
from settings.graphics import (
    BOARD_SIZE,
    CELL_GAP,
    CELL_SIZE,
    ENDGAME_MESSAGE_SIZE,
    INDICATOR_SIZE,
    PIECE_SIZE,
)
from settings.values import BLACK_VALUE


class Cell(pygame.sprite.Sprite):
    """Sprite of board cell.

    Args:
        x (int): x-axis top-left pixel position.
        y (int): y-axis top-left pixel position.
    """

    def __init__(self, x: int, y: int) -> None:
        super().__init__()

        self.image = pygame.Surface((CELL_SIZE, CELL_SIZE))
        self.image.fill(CELL_COLOR)

        self.rect = self.image.get_rect()
        self.rect.topleft = (x, y)

    def draw(self, surface: pygame.SurfaceType) -> None:
        surface.blit(self.image, self.rect)


class Board(pygame.sprite.Group):
    """Sprite group of the board."""

    def __init__(self) -> None:
        super().__init__()

        self.init_board()

    def init_board(self) -> None:
        """Initiliaze board cells position."""
        for y in range(8):
            for x in range(8):
                self.add(
                    Cell(
                        x * CELL_SIZE + (x + 1) * CELL_GAP,
                        y * CELL_SIZE + (y + 1) * CELL_GAP,
                    )
                )


class Piece(pygame.sprite.Sprite):
    """Sprite of a piece.

    A piece can be black or white, depending on which player it belongs to.

    Args:
        row (int): row position on the board.
        col (int): column position on the board.
        is_black (bool): color of the piece.
    """

    def __init__(self, row: int, col: int, is_black: bool) -> None:
        super().__init__()

        self.image = pygame.Surface((CELL_SIZE, CELL_SIZE), pygame.SRCALPHA)
        pygame.draw.circle(
            self.image,
            color=BLACK_PIECE_COLOR if is_black else WHITE_PIECE_COLOR,
            center=(
                CELL_SIZE / 2,
                CELL_SIZE / 2,
            ),
            radius=PIECE_SIZE / 2,
            width=0,  # Fill the circle
        )

        self.rect = self.image.get_rect()
        self.rect.topleft = (
            row * CELL_SIZE + (row + 1) * CELL_GAP,
            col * CELL_SIZE + (col + 1) * CELL_GAP,
        )

    def draw(self, surface: pygame.SurfaceType) -> None:
        surface.blit(self.image, self.rect)


class PieceLayout(pygame.sprite.Group):
    """Sprite group of all the pieces on the board."""

    def __init__(self) -> None:
        super().__init__()

    def update(self, cells: np.ndarray[np.int64, np.dtype[np.int64]]) -> None:
        """Update the piece layout according the content of all board's cells.

        Args:
            cells (np.ndarray[np.int64, np.dtype[np.int64]]): board's cells.
        """
        self.empty()

        for row in range(8):
            for col in range(8):
                val = cells[row, col]

                # Check empty cell
                if val == 0:
                    continue

                self.add(Piece(col, row, is_black=(val == 1)))


class Indicator(pygame.sprite.Sprite):
    """Sprite of a move indicator.

    Only certain moves are legal on each player's turn, notified by indicators
    for more convenience.

    Args:
        row (int): row position on the board.
        col (int): column position on the board.
    """

    def __init__(self, row: int, col: int) -> None:
        super().__init__()

        self.image = pygame.Surface((CELL_SIZE, CELL_SIZE), pygame.SRCALPHA)

        pygame.draw.circle(
            self.image,
            color=INDICATOR_COLOR,
            center=(
                CELL_SIZE / 2,
                CELL_SIZE / 2,
            ),
            radius=INDICATOR_SIZE / 2,
            width=0,  # Fill the circle
        )

        self.rect = self.image.get_rect()
        self.rect.topleft = (
            row * CELL_SIZE + (row + 1) * CELL_GAP,
            col * CELL_SIZE + (col + 1) * CELL_GAP,
        )

    def draw(self, surface: pygame.SurfaceType) -> None:
        surface.blit(self.image, self.rect)


class IndicatorLayout(pygame.sprite.Group):
    """Sprite group of all move indicators."""

    def __init__(self) -> None:
        super().__init__()

    def update(
        self, indicators: np.ndarray[tuple[int, int], np.dtype[np.int64]]
    ) -> None:
        """Update the indicator layout.

        Args:
            indicators (np.ndarray[tuple[int, int], np.dtype[np.int64]]): legal moves.
        """
        self.empty()

        for row, col in indicators:
            self.add(Indicator(row, col))


class PhantomPiece(pygame.sprite.Sprite):
    """Sprite of a phantom piece.

    A phantom piece is used to help the player visualize his next move by
    replacing an indicator with a semi-transparent version of his piece.

    Args:
        row (int): row position on the board.
        col (int): color position on the board.
        is_black (bool): color of the piece.
    """

    def __init__(self, row: int, col: int, is_black: bool) -> None:
        super().__init__()

        self.image = pygame.Surface((CELL_SIZE, CELL_SIZE), pygame.SRCALPHA)
        pygame.draw.circle(
            self.image,
            color=(*BLACK_PIECE_COLOR, int(255 / 2))
            if is_black
            else (*WHITE_PIECE_COLOR, int(255 / 2)),
            center=(
                CELL_SIZE / 2,
                CELL_SIZE / 2,
            ),
            radius=PIECE_SIZE / 2,
            width=0,  # Fill the circle
        )

        self.rect = self.image.get_rect()
        self.rect.topleft = (
            row * CELL_SIZE + (row + 1) * CELL_GAP,
            col * CELL_SIZE + (col + 1) * CELL_GAP,
        )

    def draw(self, surface: pygame.SurfaceType) -> None:
        surface.blit(self.image, self.rect)


class EndgameMessage(pygame.sprite.Sprite):
    """Sprite of the endgame message notifying the result of the game.

    Args:
        player_value (int | None): value of the player who won, None if draw.
    """

    def __init__(self, player_value: int | None) -> None:
        super().__init__()

        self.image = pygame.Surface((BOARD_SIZE, BOARD_SIZE), pygame.SRCALPHA)
        self.image.fill((*ENDGAME_MESSAGE_BACKGROUND_COLOR, int(255 / 1.5)))

        label = (
            "DRAW"
            if player_value is None
            else "BLACK won"
            if player_value == BLACK_VALUE
            else "WHITE won"
        )
        label_color = (
            ENDGAME_MESSAGE_DRAW_COLOR
            if player_value is None
            else ENDGAME_MESSAGE_BLACK_VICTORY_COLOR
            if player_value == BLACK_VALUE
            else ENDGAME_MESSAGE_WHITE_VICTORY_COLOR
        )

        font = pygame.font.SysFont("Verdana", ENDGAME_MESSAGE_SIZE, bold=True)
        text = font.render(label, True, label_color)
        text_rect = text.get_rect(center=(BOARD_SIZE / 2, BOARD_SIZE / 2))

        self.image.blit(text, text_rect)

        self.rect = self.image.get_rect()
        self.rect.topleft = (0, 0)

    def draw(self, surface: pygame.SurfaceType) -> None:
        surface.blit(self.image, self.rect)

首先认为这是由于环境和软件包版本问题,我用所有依赖项和软件包版本更新了我的 conda

environment.yaml

name: othellia
channels:
  - conda-forge
  - defaults
dependencies:
  - _libgcc_mutex=0.1=conda_forge
  - _openmp_mutex=4.5=2_gnu
  - alsa-lib=1.2.10=hd590300_0
  - anyio=4.0.0=pyhd8ed1ab_0
  - aom=3.7.0=h59595ed_0
  - argon2-cffi=23.1.0=pyhd8ed1ab_0
  - argon2-cffi-bindings=21.2.0=py310h2372a71_4
  - arrow=1.3.0=pyhd8ed1ab_0
  - asttokens=2.4.1=pyhd8ed1ab_0
  - async-lru=2.0.4=pyhd8ed1ab_0
  - attr=2.5.1=h166bdaf_1
  - attrs=23.1.0=pyh71513ae_1
  - babel=2.13.1=pyhd8ed1ab_0
  - backports=1.0=pyhd8ed1ab_3
  - backports.functools_lru_cache=1.6.5=pyhd8ed1ab_0
  - beautifulsoup4=4.12.2=pyha770c72_0
  - bleach=6.1.0=pyhd8ed1ab_0
  - brotli=1.1.0=hd590300_1
  - brotli-bin=1.1.0=hd590300_1
  - brotli-python=1.1.0=py310hc6cd4ac_1
  - bzip2=1.0.8=hd590300_5
  - ca-certificates=2023.11.17=hbcca054_0
  - cached-property=1.5.2=hd8ed1ab_1
  - cached_property=1.5.2=pyha770c72_1
  - cairo=1.18.0=h3faef2a_0
  - certifi=2023.11.17=pyhd8ed1ab_0
  - cffi=1.16.0=py310h2fee648_0
  - charset-normalizer=3.3.2=pyhd8ed1ab_0
  - colorama=0.4.6=pyhd8ed1ab_0
  - comm=0.1.4=pyhd8ed1ab_0
  - contourpy=1.2.0=py310hd41b1e2_0
  - coverage=7.3.2=py310h2372a71_0
  - cycler=0.12.1=pyhd8ed1ab_0
  - dav1d=1.2.1=hd590300_0
  - dbus=1.13.6=h5008d03_3
  - debugpy=1.8.0=py310hc6cd4ac_1
  - decorator=5.1.1=pyhd8ed1ab_0
  - defusedxml=0.7.1=pyhd8ed1ab_0
  - entrypoints=0.4=pyhd8ed1ab_0
  - exceptiongroup=1.1.3=pyhd8ed1ab_0
  - executing=2.0.1=pyhd8ed1ab_0
  - expat=2.5.0=hcb278e6_1
  - fluidsynth=2.3.4=h7741c18_0
  - font-ttf-dejavu-sans-mono=2.37=hab24e00_0
  - font-ttf-inconsolata=3.000=h77eed37_0
  - font-ttf-source-code-pro=2.038=h77eed37_0
  - font-ttf-ubuntu=0.83=hab24e00_0
  - fontconfig=2.14.2=h14ed4e7_0
  - fonts-conda-ecosystem=1=0
  - fonts-conda-forge=1=0
  - fonttools=4.44.3=py310h2372a71_0
  - fqdn=1.5.1=pyhd8ed1ab_0
  - freetype=2.12.1=h267a509_2
  - gettext=0.21.1=h27087fc_0
  - glib=2.78.1=hfc55251_1
  - glib-tools=2.78.1=hfc55251_1
  - gmp=6.3.0=h59595ed_0
  - graphite2=1.3.13=h58526e2_1001
  - gst-plugins-base=1.22.7=h8e1006c_0
  - gstreamer=1.22.7=h98fc4e7_0
  - harfbuzz=8.3.0=h3d44ed6_0
  - icu=73.2=h59595ed_0
  - idna=3.4=pyhd8ed1ab_0
  - importlib-metadata=6.8.0=pyha770c72_0
  - importlib_metadata=6.8.0=hd8ed1ab_0
  - importlib_resources=6.1.1=pyhd8ed1ab_0
  - iniconfig=2.0.0=pyhd8ed1ab_0
  - ipykernel=6.26.0=pyhf8b6a83_0
  - ipython=8.17.2=pyh41d4057_0
  - ipywidgets=8.1.1=pyhd8ed1ab_0
  - isoduration=20.11.0=pyhd8ed1ab_0
  - jack=1.9.22=h7c63dc7_2
  - jedi=0.19.1=pyhd8ed1ab_0
  - jinja2=3.1.2=pyhd8ed1ab_1
  - json5=0.9.14=pyhd8ed1ab_0
  - jsonpointer=2.4=py310hff52083_3
  - jsonschema=4.20.0=pyhd8ed1ab_0
  - jsonschema-specifications=2023.11.1=pyhd8ed1ab_0
  - jsonschema-with-format-nongpl=4.20.0=pyhd8ed1ab_0
  - jupyter=1.0.0=pyhd8ed1ab_10
  - jupyter-lsp=2.2.0=pyhd8ed1ab_0
  - jupyter_client=8.6.0=pyhd8ed1ab_0
  - jupyter_console=6.6.3=pyhd8ed1ab_0
  - jupyter_core=5.5.0=py310hff52083_0
  - jupyter_events=0.9.0=pyhd8ed1ab_0
  - jupyter_server=2.10.1=pyhd8ed1ab_0
  - jupyter_server_terminals=0.4.4=pyhd8ed1ab_1
  - jupyterlab=4.0.9=pyhd8ed1ab_0
  - jupyterlab_pygments=0.2.2=pyhd8ed1ab_0
  - jupyterlab_server=2.25.2=pyhd8ed1ab_0
  - jupyterlab_widgets=3.0.9=pyhd8ed1ab_0
  - keyutils=1.6.1=h166bdaf_0
  - kiwisolver=1.4.5=py310hd41b1e2_1
  - krb5=1.21.2=h659d440_0
  - lame=3.100=h166bdaf_1003
  - lcms2=2.15=hb7c19ff_3
  - ld_impl_linux-64=2.40=h41732ed_0
  - lerc=4.0.0=h27087fc_0
  - libavif16=1.0.2=hed45d22_0
  - libblas=3.9.0=19_linux64_openblas
  - libbrotlicommon=1.1.0=hd590300_1
  - libbrotlidec=1.1.0=hd590300_1
  - libbrotlienc=1.1.0=hd590300_1
  - libcap=2.69=h0f662aa_0
  - libcblas=3.9.0=19_linux64_openblas
  - libclang=15.0.7=default_h7634d5b_3
  - libclang13=15.0.7=default_h9986a30_3
  - libcups=2.3.3=h4637d8d_4
  - libdb=6.2.32=h9c3ff4c_0
  - libdeflate=1.19=hd590300_0
  - libedit=3.1.20191231=he28a2e2_2
  - libevent=2.1.12=hf998b51_1
  - libexpat=2.5.0=hcb278e6_1
  - libffi=3.4.2=h7f98852_5
  - libflac=1.4.3=h59595ed_0
  - libgcc-ng=13.2.0=h807b86a_3
  - libgcrypt=1.10.2=hd590300_0
  - libgfortran-ng=13.2.0=h69a702a_3
  - libgfortran5=13.2.0=ha4646dd_3
  - libglib=2.78.1=h783c2da_1
  - libgomp=13.2.0=h807b86a_3
  - libgpg-error=1.47=h71f35ed_0
  - libiconv=1.17=h166bdaf_0
  - libjpeg-turbo=3.0.0=hd590300_1
  - liblapack=3.9.0=19_linux64_openblas
  - libllvm15=15.0.7=h5cf9203_3
  - libmad=0.15.1b=h0b41bf4_1001
  - libnsl=2.0.1=hd590300_0
  - libogg=1.3.4=h7f98852_1
  - libopenblas=0.3.24=pthreads_h413a1c8_0
  - libopus=1.3.1=h7f98852_1
  - libpng=1.6.39=h753d276_0
  - libpq=16.1=hfc447b1_0
  - libsndfile=1.2.2=hc60ed4a_1
  - libsodium=1.0.18=h36c2ea0_1
  - libsqlite=3.44.0=h2797004_0
  - libstdcxx-ng=13.2.0=h7e041cc_3
  - libsystemd0=254=h3516f8a_0
  - libtiff=4.6.0=ha9c0a0a_2
  - libuuid=2.38.1=h0b41bf4_0
  - libvorbis=1.3.7=h9c3ff4c_0
  - libwebp-base=1.3.2=hd590300_0
  - libxcb=1.15=h0b41bf4_0
  - libxkbcommon=1.6.0=h5d7e998_0
  - libxml2=2.11.6=h232c23b_0
  - libzlib=1.2.13=hd590300_5
  - lz4-c=1.9.4=hcb278e6_0
  - markupsafe=2.1.3=py310h2372a71_1
  - matplotlib=3.8.1=py310hff52083_0
  - matplotlib-base=3.8.1=py310h62c0568_0
  - matplotlib-inline=0.1.6=pyhd8ed1ab_0
  - mistune=3.0.2=pyhd8ed1ab_0
  - mpg123=1.32.3=h59595ed_0
  - munkres=1.1.4=pyh9f0ad1d_0
  - mypy=1.7.0=py310h2372a71_0
  - mypy_extensions=1.0.0=pyha770c72_0
  - mysql-common=8.0.33=hf1915f5_6
  - mysql-libs=8.0.33=hca2cd23_6
  - nbclient=0.8.0=pyhd8ed1ab_0
  - nbconvert=7.11.0=pyhd8ed1ab_0
  - nbconvert-core=7.11.0=pyhd8ed1ab_0
  - nbconvert-pandoc=7.11.0=pyhd8ed1ab_0
  - nbformat=5.9.2=pyhd8ed1ab_0
  - ncurses=6.4=h59595ed_2
  - nest-asyncio=1.5.8=pyhd8ed1ab_0
  - notebook=7.0.6=pyhd8ed1ab_0
  - notebook-shim=0.2.3=pyhd8ed1ab_0
  - nspr=4.35=h27087fc_0
  - nss=3.94=h1d7d5a4_0
  - numpy=1.26.0=py310hb13e2d6_0
  - openjpeg=2.5.0=h488ebb8_3
  - openssl=3.1.4=hd590300_0
  - opusfile=0.12=h3358134_2
  - overrides=7.4.0=pyhd8ed1ab_0
  - packaging=23.2=pyhd8ed1ab_0
  - pandas=2.1.3=py310hcc13569_0
  - pandoc=3.1.3=h32600fe_0
  - pandocfilters=1.5.0=pyhd8ed1ab_0
  - parso=0.8.3=pyhd8ed1ab_0
  - patsy=0.5.3=pyhd8ed1ab_0
  - pcre2=10.42=hcad00b1_0
  - pexpect=4.8.0=pyh1a96a4e_2
  - pickleshare=0.7.5=py_1003
  - pillow=10.1.0=py310h01dd4db_0
  - pip=23.3.1=pyhd8ed1ab_0
  - pixman=0.42.2=h59595ed_0
  - pkgutil-resolve-name=1.3.10=pyhd8ed1ab_1
  - platformdirs=4.0.0=pyhd8ed1ab_0
  - pluggy=1.3.0=pyhd8ed1ab_0
  - ply=3.11=py_1
  - portaudio=19.6.0=h7c63dc7_9
  - portmidi=2.0.4=h7c63dc7_2
  - prometheus_client=0.18.0=pyhd8ed1ab_1
  - prompt-toolkit=3.0.41=pyha770c72_0
  - prompt_toolkit=3.0.41=hd8ed1ab_0
  - psutil=5.9.5=py310h2372a71_1
  - pthread-stubs=0.4=h36c2ea0_1001
  - ptyprocess=0.7.0=pyhd3deb0d_0
  - pulseaudio-client=16.1=hb77b528_5
  - pure_eval=0.2.2=pyhd8ed1ab_0
  - pycparser=2.21=pyhd8ed1ab_0
  - pygame=2.5.2=py310h408e605_2
  - pygments=2.17.0=pyhd8ed1ab_0
  - pyparsing=3.1.1=pyhd8ed1ab_0
  - pyqt=5.15.9=py310h04931ad_5
  - pyqt5-sip=12.12.2=py310hc6cd4ac_5
  - pysocks=1.7.1=pyha2e5f31_6
  - pytest=7.4.3=pyhd8ed1ab_0
  - python=3.10.0=h543edf9_3_cpython
  - python-dateutil=2.8.2=pyhd8ed1ab_0
  - python-fastjsonschema=2.19.0=pyhd8ed1ab_0
  - python-json-logger=2.0.7=pyhd8ed1ab_0
  - python-tzdata=2023.3=pyhd8ed1ab_0
  - python_abi=3.10=4_cp310
  - pytz=2023.3.post1=pyhd8ed1ab_0
  - pyyaml=6.0.1=py310h2372a71_1
  - pyzmq=25.1.1=py310h795f18f_2
  - qt-main=5.15.8=h82b777d_17
  - qtconsole-base=5.5.1=pyha770c72_0
  - qtpy=2.4.1=pyhd8ed1ab_0
  - rav1e=0.6.6=he8a937b_2
  - readline=8.2=h8228510_1
  - referencing=0.31.0=pyhd8ed1ab_0
  - requests=2.31.0=pyhd8ed1ab_0
  - rfc3339-validator=0.1.4=pyhd8ed1ab_0
  - rfc3986-validator=0.1.1=pyh9f0ad1d_0
  - rpds-py=0.13.0=py310hcb5633a_0
  - scipy=1.11.3=py310hb13e2d6_1
  - sdl2=2.28.4=h77f46ba_0
  - sdl2_image=2.6.3=h53e0c72_4
  - sdl2_mixer=2.6.3=h8830914_1
  - sdl2_ttf=2.20.2=ha14f88b_2
  - seaborn=0.13.0=hd8ed1ab_0
  - seaborn-base=0.13.0=pyhd8ed1ab_0
  - send2trash=1.8.2=pyh41d4057_0
  - setuptools=68.2.2=pyhd8ed1ab_0
  - sip=6.7.12=py310hc6cd4ac_0
  - six=1.16.0=pyh6c4a22f_0
  - sniffio=1.3.0=pyhd8ed1ab_0
  - soupsieve=2.5=pyhd8ed1ab_1
  - sqlite=3.44.0=h2c6b66d_0
  - stack_data=0.6.2=pyhd8ed1ab_0
  - statsmodels=0.14.0=py310h1f7b6fc_2
  - svt-av1=1.7.0=h59595ed_0
  - terminado=0.18.0=pyh0d859eb_0
  - tinycss2=1.2.1=pyhd8ed1ab_0
  - tk=8.6.13=noxft_h4845f30_101
  - toml=0.10.2=pyhd8ed1ab_0
  - tomli=2.0.1=pyhd8ed1ab_0
  - tornado=6.3.3=py310h2372a71_1
  - tqdm=4.66.1=pyhd8ed1ab_0
  - traitlets=5.13.0=pyhd8ed1ab_0
  - types-python-dateutil=2.8.19.14=pyhd8ed1ab_0
  - types-tqdm=4.66.0.4=pyhd8ed1ab_0
  - typing-extensions=4.8.0=hd8ed1ab_0
  - typing_extensions=4.8.0=pyha770c72_0
  - typing_utils=0.1.0=pyhd8ed1ab_0
  - tzdata=2023c=h71feb2d_0
  - unicodedata2=15.1.0=py310h2372a71_0
  - uri-template=1.3.0=pyhd8ed1ab_0
  - urllib3=2.1.0=pyhd8ed1ab_0
  - wcwidth=0.2.10=pyhd8ed1ab_0
  - webcolors=1.13=pyhd8ed1ab_0
  - webencodings=0.5.1=pyhd8ed1ab_2
  - websocket-client=1.6.4=pyhd8ed1ab_0
  - wheel=0.41.3=pyhd8ed1ab_0
  - widgetsnbextension=4.0.9=pyhd8ed1ab_0
  - xcb-util=0.4.0=hd590300_1
  - xcb-util-image=0.4.0=h8ee46fc_1
  - xcb-util-keysyms=0.4.0=h8ee46fc_1
  - xcb-util-renderutil=0.3.9=hd590300_1
  - xcb-util-wm=0.4.1=h8ee46fc_1
  - xkeyboard-config=2.40=hd590300_0
  - xorg-kbproto=1.0.7=h7f98852_1002
  - xorg-libice=1.1.1=hd590300_0
  - xorg-libsm=1.2.4=h7391055_0
  - xorg-libx11=1.8.7=h8ee46fc_0
  - xorg-libxau=1.0.11=hd590300_0
  - xorg-libxdmcp=1.1.3=h7f98852_0
  - xorg-libxext=1.3.4=h0b41bf4_2
  - xorg-libxrender=0.9.11=hd590300_0
  - xorg-renderproto=0.11.1=h7f98852_1002
  - xorg-xextproto=7.3.0=h0b41bf4_1003
  - xorg-xf86vidmodeproto=2.3.1=h7f98852_1002
  - xorg-xproto=7.0.31=h7f98852_1007
  - xz=5.2.6=h166bdaf_0
  - yaml=0.2.5=h7f98852_2
  - zeromq=4.3.5=h59595ed_0
  - zipp=3.17.0=pyhd8ed1ab_0
  - zlib=1.2.13=hd590300_5
  - zstd=1.5.5=hfc55251_0

但是,问题仍然存在。

第二次,看到错误位于 pygame 类上,我对类似问题做了一些研究。我从 pygame 存储库中偶然发现了这个pull-request,它似乎解决了类似的问题,但对我没有多大帮助(据我能理解这些讨论)。

所以我目前陷入了这个问题,不知道是什么原因造成的。 难道是我的工作流程文件的设计方式造成的?

python-3.x pygame github-actions conda mypy
1个回答
1
投票

本地和远程环境之间的类型提示存根似乎不同。

请注意,键入文件是通过

mypy --install-types
命令单独安装的。 在运行 mypy checker 之前,您可能在 GitHub 操作中有此命令。

© www.soinside.com 2019 - 2024. All rights reserved.