这是一个用于安装和配置 Poetry 的 Github action。
该 action 安装 Poetry,将可执行文件添加到运行器系统路径,并设置相关的 Poetry 配置。
如果你只需要默认的 Poetry,只需在你的工作流中添加以下内容:
- name: 安装 Poetry uses: snok/install-poetry@v1
如果你想设置 Poetry 配置或安装特定版本,可以指定输入:
- name: 安装和配置 Poetry uses: snok/install-poetry@v1 with: version: 1.5.1 virtualenvs-create: true virtualenvs-in-project: false virtualenvs-path: ~/my-custom-path installer-parallel: true
如果你需要向安装程序脚本传递额外的参数,可以使用 installation-arguments
指定这些参数。
该 action 在 macOS 和 Ubuntu 运行器上经过充分测试,适用于 Poetry 版本 >= 1.1。如果你在 Windows 上使用它,请参阅 在 Windows 上运行 部分。
当前的默认设置为:
version: latest virtualenvs-create: true virtualenvs-in-project: false virtualenvs-path: {cache-dir}/virtualenvs installer-parallel: true
你可以使用 installation-arguments 直接向 poetry 安装程序指定安装参数,方法如下:
- name: 安装和配置 Poetry uses: snok/install-poetry@v1 with: installation-arguments: --git https://github.com/python-poetry/poetry.git@69bd6820e320f84900103fdf867e24b355d6aa5d
如果你想进行进一步的配置更改 - 例如,更改某个 experimental
Poetry 配置设置,或者只是在调用 action 后更改 Poetry 配置 - 你可以在后续步骤中这样做:
- uses: snok/install-poetry@v1 - run: poetry config experimental.new-installer false
本节包含一系列工作流示例,旨在帮助
一些示例可能比较长,所以这里有一些链接
运行测试套件的基本示例工作流可以这样构建:
name: test on: pull_request jobs: test: runs-on: ubuntu-latest steps: #---------------------------------------------- # 检出仓库并设置 python #---------------------------------------------- - name: 检出仓库 uses: actions/checkout@v4 - name: 设置 python id: setup-python uses: actions/setup-python@v5 with: python-version: '3.12' #---------------------------------------------- # ----- 安装 & 配置 poetry ----- #---------------------------------------------- - name: 安装 Poetry uses: snok/install-poetry@v1 with: virtualenvs-create: true virtualenvs-in-project: true virtualenvs-path: .venv installer-parallel: true #---------------------------------------------- # 如果缓存存在,加载缓存的 venv #---------------------------------------------- - name: 加载缓存的 venv id: cached-poetry-dependencies uses: actions/cache@v4 with: path: .venv key: venv-${{ runner.os }}-${{ steps.setup-python.outputs.python-version }}-${{ hashFiles('**/poetry.lock') }} #---------------------------------------------- # 如果缓存不存在,安装依赖 #---------------------------------------------- - name: 安装依赖 if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true' run: poetry install --no-interaction --no-root #---------------------------------------------- # 安装你的根项目,如果需要的话 #---------------------------------------------- - name: 安装项目 run: poetry install --no-interaction #---------------------------------------------- # 运行测试套件 #---------------------------------------------- - name: 运行测试 run: | source .venv/bin/activate pytest tests/ coverage report
对于在多个操作系统、Python 版本或包版本组合上运行测试套件的更广泛示例,可以这样构建:
linting 作业与矩阵无关,仅作为灵感包含。
name: test on: pull_request jobs: linting: runs-on: ubuntu-latest steps: #---------------------------------------------- # 检出仓库并设置 python #---------------------------------------------- - uses: actions/checkout@v4 - uses: actions/setup-python@v5 #---------------------------------------------- # 如果缓存存在,加载 pip 缓存 #---------------------------------------------- - uses: actions/cache@v4 with: path: ~/.cache/pip key: ${{ runner.os }}-pip restore-keys: ${{ runner.os }}-pip #---------------------------------------------- # 安装并运行 linters #---------------------------------------------- - run: python -m pip install black flake8 isort - run: | flake8 . black . --check isort . test: needs: linting strategy: fail-fast: true matrix: os: [ "ubuntu-latest", "macos-latest" ] python-version: [ "3.8", "3.9", "3.10", "3.11", "3.12" ] django-version: [ "4", "5" ] runs-on: ${{ matrix.os }} steps: #---------------------------------------------- # 检出仓库并设置 python #---------------------------------------------- - name: 检出仓库 uses: actions/checkout@v4 - name: 设置 python ${{ matrix.python-version }} id: setup-python uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} #---------------------------------------------- # ----- 安装 & 配置 poetry ----- #---------------------------------------------- - name: 安装 Poetry uses: snok/install-poetry@v1 with: virtualenvs-create: true virtualenvs-in-project: true #---------------------------------------------- # 如果缓存存在,加载缓存的 venv #---------------------------------------------- - name: 加载缓存的 venv id: cached-poetry-dependencies uses: actions/cache@v4 with: path: .venv key: venv-${{ runner.os }}-${{ steps.setup-python.outputs.python-version }}-${{ hashFiles('**/poetry.lock') }} #---------------------------------------------- # 如果缓存不存在,安装依赖 #---------------------------------------------- - name: 安装依赖 if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true' run: poetry install --no-interaction --no-root #---------------------------------------------- # 安装你的根项目,如果需要的话 #---------------------------------------------- - name: 安装库 run: poetry install --no-interaction #---------------------------------------------- # 添加矩阵特定内容并运行测试套件 #---------------------------------------------- - name: 安装 django ${{ matrix.django-version }} run: | source .venv/bin/activate pip install "Django==${{ matrix.django-version }}" - name: 运行测试 run: | source .venv/bin/activate pytest tests/ coverage report
本节包含一个简单的 codecov 上传。更多信息请参见 codecov action。
name: coverage on: push: branches: - master jobs: codecov: runs-on: ubuntu-latest steps: #---------------------------------------------- # 检出仓库并设置 python #---------------------------------------------- - uses: actions/checkout@v4 - uses: actions/setup-python@v5 id: setup-python with: python-version: '3.12' #---------------------------------------------- # ----- 安装 & 配置 poetry ----- #---------------------------------------------- - name: 安装 Poetry uses: snok/install-poetry@v1 with: virtualenvs-create: true virtualenvs-in-project: true #---------------------------------------------- # 如果缓存存在,加载缓存的 venv #---------------------------------------------- - name: 加载缓存的 venv id: cached-poetry-dependencies uses: actions/cache@v4 with: path: .venv key: venv-${{ runner.os }}-${{ steps.setup-python.outputs.python-version }}-${{ hashFiles('**/poetry.lock') }} #---------------------------------------------- # 如果缓存不存在,安装依赖 #---------------------------------------------- - name: 安装依赖 if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true' run: poetry install --no-interaction --no-root #---------------------------------------------- # 安装你的根项目,如果需要的话 #---------------------------------------------- - name: 安装库 run: poetry install --no-interaction #---------------------------------------------- # 运行测试套件并输出覆盖率文件 #---------------------------------------------- - name: 使用 pytest 测试 run: poetry run pytest --cov=<project-dir> --cov-report=xml #---------------------------------------------- # 上传覆盖率统计 # (需要在仓库 secrets 中设置 CODECOV_TOKEN) #---------------------------------------------- - name: 上传覆盖率 uses: codecov/codecov-action@v3 with: token: ${{ secrets.CODECOV_TOKEN }} # 仅私有仓库需要 file: ./coverage.xml fail_ci_if_error: true
在 Windows 上运行此 action 是支持的,但有两点需要注意:
你需要将作业级别的默认 shell 设置为 bash
defaults: run: shell: bash
如果你正在运行一个操作系统矩阵,并且想要在项目中激活你的 venv,你必须处理不同操作系统上的不同文件夹结构。要使其工作,你可以这样做
- run: | source .venv/scripts/activate pytest --version if: runner.os == 'Windows' - run: | source .venv/bin/activate pytest --version if: runner.os != 'Windows'
但我们认为这种结构化工作流程的方式很烦人,所以我们设置了一个自定义环境变量 $VENV
,它会指向特定操作系统的 venv 激活脚本,无论你运行的是 UNIX 还是 Windows。这意味着你可以这样做:
- run: | source $VENV pytest --version
作为参考,使用 windows-latest
的完整操作系统矩阵可以这样设置:
name: test on: pull_request jobs: test-windows: strategy: matrix: [ "ubuntu-latest", "macos-latest", "windows-latest" ] defaults: run: shell: bash runs-on: ${{ matrix.os }} steps: - name: Check out repository uses: actions/checkout@v4 - name: Set up python id: setup-python uses: actions/setup-python@v5 with: python-version: '3.12' - name: Install Poetry uses: snok/install-poetry@v1 with: virtualenvs-create: true virtualenvs-in-project: true - name: Load cached venv id: cached-pip-wheels uses: actions/cache@v4 with: path: ~/.cache key: venv-${{ runner.os }}-${{ steps.setup-python.outputs.python-version }}-${{ hashFiles('**/poetry.lock') }} - name: Install dependencies run: poetry install --no-interaction --no-root - name: Install library run: poetry install --no-interaction - run: | source $VENV pytest --version
由于某些原因,在 Windows 运行器上缓存你的 venv
似乎不能按预期工作。你可以在这里看到一个例子,其中一个工作流停滞并运行 了超过3小时,直到被手动取消。
如果你确实想在 Windows 运行器上缓存你的依赖项,你应该考虑缓存你的 pip wheels 而不是你的 venv;这似乎可以正常工作。
我们添加的所有示例都使用了这些 Poetry 设置
- name: Install Poetry uses: snok/install-poetry@v1 with: virtualenvs-create: true virtualenvs-in-project: true
虽然这应该适用于大多数情况,而且我们通常更喜欢在项目中创建我们的 virtualenvs
以使缓存步骤尽可能简单,但有一些合理的理由不想在项目目录中构建 venv。
有两种其他相关的场景:
创建 venv,但不在项目目录中
如果你使用默认设置,venv 位置会从 .venv
变为使用 {cache-dir}/virtualenvs
。你也可以将路径更改为你喜欢的任何位置。不过,通常这会让事情变得有点棘手,因为目录会根据操作系统而变化,使得编写与操作系统无关的工作流程变得更加困难。
解决这个问题的一种方法是完全绕过这个问题,利用 Poetry 的 poetry run
命令。
以矩阵测试示例中的最后两个步骤为例,这是我们之前记录的安装特定于矩阵的依赖项并运行测试套件的方法:
- name: Install django ${{ matrix.django-version }} run: | source .venv/bin/activate pip install "Django==${{ matrix.django-version }}" - name: Run tests run: | source .venv/bin/activate pytest tests/ coverage report
使用远程 venv,你可以这样做:
- name: Install django ${{ matrix.django-version }} run: poetry add "Django==${{ matrix.django-version }}" - name: Run tests run: | poetry run pytest tests/ poetry run coverage report
我们在工作流程中从未需要缓存远程 venv。 如果你有这方面的经验,欢迎提交 PR 解释如何做到这一点。
跳过 venv 创建
如果你想跳过 venv 创建,只需删除 venv 激活行:source .venv/bin/activate
,原始示例就都变得有效了。
要在这种情况下启用缓存,你可能需要设置类似于矩阵测试中 linting 作业缓存步骤的东西;缓存你的 pip wheels 而不是已安装的依赖项。
由于你没有缓存整个 venv,你每次运行作业时都需要重新安装依赖项;然而,缓存仍然会为你节省下载 wheels 所需的时间(并且会减少对 PyPi 的压力)。
除了缓存 Python 依赖项外,你可能会发现缓存 Poetry 安装本身也很有用。这应该可以减少总运行时间约 10 秒,并减少此操作运行时间的约 95%。
name: test on: pull_request jobs: test: runs-on: ubuntu-latest steps: - name: Check out repository uses: actions/checkout@v4 - name: Set up python uses: actions/setup-python@v5 with: python-version: '3.12' - name: Load cached Poetry installation id: cached-poetry uses: actions/cache@v4 with: path: ~/.local # 路径取决于操作系统 key: poetry-0 # 递增以重置缓存 - name: Install Poetry if: steps.cached-poetry.outputs.cache-hit != 'true' uses: snok/install-poetry@v1
要缓存的目录将取决于运行器的操作系统。
请注意,当缓存命中并且跳过了 Install Poetry 步骤时,配置选项不会重新应用。缓存的 Poetry 安装现在将以默认设置运行。为了使事情保持一致,你可以添加一个专门的配置步骤来重新应用你的配置。例如:
- name: Configure poetry if: steps.cached-poetry.outputs.cache-hit == 'true' run: poetry config virtualenvs.in-project true
或者考虑使用 config.toml 文件来存储你的配置选项。详情请参见 Poetry 配置文档。
使用 Poetry 1.2 或更高版本,你可以使用此操作安装插件:
- uses: snok/install-poetry@v1 with: plugins: poetry-plugin-a
你可以使用空格分隔的列表:
- uses: snok/install-poetry@v1 with: plugins: | poetry-plugin-a poetry-plugin-b
欢迎随时贡献;提交 PR!
install-poetry 使用 MIT 许可证。有关详细信息,请参阅许可证文件。
如果这个项目对你有帮助,请留下⭐️!
AI数字人视频创作平台
Keevx 一款开箱即用的AI数字人视频创作平台,广泛适用于电商广告、企业培训与社媒宣传,让全球企业与个人创作者无需拍摄剪辑,就能快速生成多语言、高质量的专业视频。
一站式AI创作平台
提供 AI 驱动的图片、视频生成及数字人等功能,助力创意创作
AI办公助手,复杂任务高效处理
AI办公助手,复杂任务高效处理。办公效率低?扣子空间AI助手支持播客生成、PPT制作、网页开发及报告写作,覆盖科研、商业、舆情等领域的专家Agent 7x24小时响应,生活工作无缝切换,提升50%效率!
AI辅助编程,代码自动修复
Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。
AI小说写作助手,一站式润色、改写、扩写
蛙蛙写作—国内先进的AI写作平台,涵盖小说、学术、社交媒体等多场景。提供续写、改写、润色等功能,助力创作者高效优化写作流程。界面简洁, 功能全面,适合各类写作者提升内容品质和工作效率。
全能AI智能助手,随时解答生活与工作的多样问题
问小白,由 元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。
实时语音翻译/同声传译工具
Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让 你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。
一键生成PPT和Word,让学习生活更轻松
讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。
深度推理能力全新升级,全面对标OpenAI o1
科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景 ,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。
一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型
Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。
最新AI工具、AI资讯
独家AI资源、AI项目落地
微信扫一扫关注公众号