开发环境#
将您刚刚在 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
一种选择是创建本地开发环境并激活该环境
Bash(macOS、Linux、Windows)
$ source ./dev/start
cmd.exe(Windows)
> .\dev\start.bat
此命令将创建一个特定于项目的基准环境(运行此命令后,请参见您的仓库目录中的
devenv
)。如果基准环境已存在,此命令将只激活已创建的devenv
环境。为了确保解释的 Conda 代码是项目目录中的代码,请查看
conda location:
的值,该值在conda info --all
的输出中。或者,仅限 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_PYTHON
:major.minor
值;例如3.11
。CONDA_DOCKER_DEFAULT_CHANNEL
:可以是defaults
或conda-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/代码审查过程之前运行这些工具可以从两个方面提供帮助
它通过自动化识别和纠正代码样式/质量问题的繁琐过程来帮助您
它在代码审查期间帮助我们,我们可以专注于您的贡献的实质
您可以随意阅读他们在 文档 中所有与 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 运行的一些工具可能会修改代码(参见 black、blacken-docs 和 darker)。如果 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.sh
和 dev\windows\integration.bat
获取更多详细信息。