开发环境#

  1. 将您刚刚在 GitHub 上 fork 的仓库克隆到您的本地机器。配置您的仓库以指向“上游”(主 Conda 仓库)和您的 fork(“origin”)。有关详细说明,请参见以下内容

    Bash(macOS、Linux、Windows)

    # choose the repository location
    # warning: not the location of an existing conda installation!
    $ CONDA_PROJECT_ROOT="$HOME/conda"
    
    # clone the project
    # replace `your-username` with your actual GitHub username
    $ git clone [email protected]:your-username/conda "$CONDA_PROJECT_ROOT"
    $ cd "$CONDA_PROJECT_ROOT"
    
    # set the `upstream` as the the main repository
    $ git remote add upstream [email protected]:conda/conda
    

    cmd.exe(Windows)

    # choose the repository location
    # warning: not the location of an existing conda installation!
    > set "CONDA_PROJECT_ROOT=%HOMEPATH%\conda"
    
    # clone the project
    # replace `your-username` with your actual GitHub username
    > git clone [email protected]:your-username/conda "%CONDA_PROJECT_ROOT%"
    > cd "%CONDA_PROJECT_ROOT%"
    
    # set the `upstream` as the main repository
    > git remote add upstream [email protected]:conda/conda
    
  2. 一种选择是创建本地开发环境并激活该环境

    Bash(macOS、Linux、Windows)

    $ source ./dev/start
    

    cmd.exe(Windows)

    > .\dev\start.bat
    

    此命令将创建一个特定于项目的基准环境(运行此命令后,请参见您的仓库目录中的 devenv)。如果基准环境已存在,此命令将只激活已创建的 devenv 环境。

    为了确保解释的 Conda 代码是项目目录中的代码,请查看 conda location: 的值,该值在 conda info --all 的输出中。

  3. 或者,仅限 Linux 开发,您可以使用 CI 管道使用的相同 Docker 镜像。请注意,您可以在所有三个操作系统中运行此命令!我们正在使用 docker compose,它为您提供三个操作

    • unit-tests:运行所有单元测试。

    • integration-tests:运行所有集成测试。

    • interactive:您将进入一个预先初始化的 Bash 会话中,您可以在其中根据需要运行所有 pytest 命令。

    使用 docker compose run <action> 使用它们。例如

    任何 shell(macOS、Linux、Windows)

    $ docker compose run unit-tests
    

    这将构建与持续集成中使用的相同 Docker 镜像,该镜像来自 Github Container Registry 并启动 bash,其中 Conda 开发模式已启用。

    默认情况下,它将使用基于 Miniconda 的 Python 3.9 安装,该安装配置为 defaults 频道。您可以使用两个环境变量自定义它

    • CONDA_DOCKER_PYTHONmajor.minor 值;例如 3.11

    • CONDA_DOCKER_DEFAULT_CHANNEL:可以是 defaultsconda-forge

    例如,如果您需要基于 conda-forge 的 3.12 镜像

    Bash(macOS、Linux、Windows)

    $ CONDA_DOCKER_PYTHON=3.12 CONDA_DOCKER_DEFAULT_CHANNEL=conda-forge docker compose build --no-cache
    # --- in some systems you might also need to re-supply the same values as CLI flags:
    # CONDA_DOCKER_PYTHON=3.12 CONDA_DOCKER_DEFAULT_CHANNEL=conda-forge docker compose build --no-cache --build-arg python_version=3.12 --build-arg default_channel=conda-forge
    $ CONDA_DOCKER_PYTHON=3.12 CONDA_DOCKER_DEFAULT_CHANNEL=conda-forge docker compose run interactive
    

    cmd.exe(Windows)

    > set CONDA_DOCKER_PYTHON=3.12
    > set CONDA_DOCKER_DEFAULT_CHANNEL=conda-forge
    > docker compose build --no-cache
    > docker compose run interactive
    > set "CONDA_DOCKER_PYTHON="
    > set "CONDA_DOCKER_DEFAULT_CHANNEL="
    

conda 仓库将被挂载到 /opt/conda-src,因此在 Docker 容器运行时,您在编辑器中所做的所有更改都将实时反映出来。

静态代码分析#

该项目使用 pre-commit 进行配置,以便在每次提交时自动运行 linting 和其他静态代码分析。在 PR/代码审查过程之前运行这些工具可以从两个方面提供帮助

  1. 它通过自动化识别和纠正代码样式/质量问题的繁琐过程来帮助

  2. 它在代码审查期间帮助我们,我们可以专注于您的贡献的实质

您可以随意阅读他们在 文档 中所有与 pre-commit 相关的内容,但我们已经包含了以下内容,这些内容是您入门所需的关键部分

Bash(macOS、Linux、Windows)

# reuse the development environment created above
$ source ./dev/start
# or start the Docker image in interactive mode
# $ docker compose run interactive

# install pre-commit hooks for conda
$ cd "$CONDA_PROJECT_ROOT"
$ pre-commit install

# manually running pre-commit on current changes
# note: by default pre-commit only runs on staged files
$ pre-commit run

# automatically running pre-commit during commit
$ git commit

cmd.exe(Windows)

:: reuse the development environment created above
> .\dev\start.bat
:: or start the Docker image in interactive mode
:: > docker compose run interactive

:: install pre-commit hooks for conda
> cd "%CONDA_PROJECT_ROOT%"
> pre-commit install

:: manually running pre-commit on current changes
:: note: by default pre-commit only runs on staged files
> pre-commit run

:: automatically running pre-commit during commit
> git commit

请注意,pre-commit 运行的一些工具可能会修改代码(参见 blackblacken-docsdarker)。如果 pre-commit 检测到任何文件被修改,它将终止提交,让您有机会在再次提交之前查看代码。

严格地说,在本地机器上使用 pre-commit 进行提交是可选的(如果您没有安装 pre-commit,您仍然可以正常提交)。但是,一旦您打开 PR 来贡献您的更改,pre-commit 将被自动运行,届时发生的任何错误都需要在继续之前解决。

测试#

我们使用 pytest 来运行我们的测试套件。请参阅 pytest 的 文档 以获取详细说明,但一般来说,您只需要以下内容

Bash(macOS、Linux、Windows)

# reuse the development environment created above
$ source ./dev/start
# or start the Docker image in interactive mode
# $ docker compose run interactive

# run conda's unit tests using GNU make
$ make unit

# or alternately with pytest
$ pytest --cov -m "not integration" conda tests

# or you can use pytest to focus on one specific test
$ pytest --cov tests/test_create.py -k create_install_update_remove_smoketest

cmd.exe(Windows)

:: reuse the development environment created above
> .\dev\start.bat
:: or start the Docker image in interactive mode
:: > docker compose run interactive

:: run conda's unit tests with pytest
> pytest --cov -m "not integration" conda tests

:: or you can use pytest to focus on one specific test
> pytest --cov tests\test_create.py -k create_install_update_remove_smoketest

如果您没有测量代码覆盖率,pytest 可以在没有 --cov 选项的情况下运行。 docker compose 测试传递 --cov

注意:一些集成测试需要您事先使用 conda-build 构建包。如果您运行 docker compose run integration-tests,则会自动处理此步骤,但在其他模式下需要您手动执行。

Bash(macOS、Linux、Windows)

$ conda install conda-build
$ conda-build tests/test-recipes/activate_deactivate_package tests/test-recipes/pre_link_messages_package

查看 dev/linux/integration.shdev\windows\integration.bat 获取更多详细信息。