python - 如何使用 github 操作发布 pip 轮子

标签 python github github-actions pypi python-wheel

也许是一个广泛的问题,但我认为这与任何使用 github 并可以显着减少他们的工作量的 python 包维护者相关,所以希望这些权力能够让它站住脚。
基本上,在我看来:

  • 为 python 构建和发布轮子很好,但有时它们必须特定于操作系统才能正常工作(即构建在类似的操作系统/环境上)
  • Github 操作提供了广泛的操作系统来运行作业(目前是免费的),因此它可用于构建这些轮子
  • Github Action 可以很容易地通过 twine 发布 sidst

  • 所以我的问题是:
  • 有没有一种直接的方法来为一堆环境构建轮子(例如,在 github 操作中使用 OS/env 矩阵)然后通过 github 操作发布它们。通过将它们聚合在一个地方然后运行一些 twine 命令?问题似乎是无法通过 github 操作在不同的 envs/vms 设置之间进行通信。

  • 我可以想到各种解决方案,例如一个中间的 s3 存储桶,但在 pypi 和/或 github 操作在这方面的工作方式方面,我可能大错特错,因此我正在浏览一个非常简单的问题。

    最佳答案

    正如我在评论中提到的,这是运行并行构建但一次上传的一种可能方法:

    name: 'Aggregation'
    
    on: [push]
    
    env:
      ARTIFACT: artifact.bin
    
    jobs:
      build:
        runs-on: ${{ matrix.os }} 
        strategy:
          matrix:
            os:
              - windows-latest
              - ubuntu-latest
              - macos-latest
        steps:
          - uses: actions/checkout@v2
    
          - shell: bash
            run: |
              echo "Run your build command here"
              echo "This is a fake ${{ matrix.os }} build artifact" >$ARTIFACT
    
          - uses: actions/upload-artifact@v2
            with:
              name: build-${{ matrix.os }}-${{ github.sha }}
              path: ${{ env.ARTIFACT }}
    
      publish:
        runs-on: ubuntu-latest
        needs: build
        steps:
          - uses: actions/download-artifact@v2
            with:
              path: artifacts
    
          - shell: bash
            working-directory: artifacts
            run: |
              for i in $( ls ); do
                cat $i/$ARTIFACT
              done
    
    每个矩阵作业构建并上传自己的工件到 github。
    在下载所有工件并在本例中迭代它们之前,发布作业会等待所有先前的作业完成。另一个好处是,如果任何矩阵作业失败,发布都会失败。当然,这只有在所有操作系统上的构建步骤和命令都相同时才很简单。
    以下是部分测试运行截图:
    workflow run
    产生的工件:
    artifacts
    发布作业的输出:
    output

    关于python - 如何使用 github 操作发布 pip 轮子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66369434/

    相关文章:

    python - REST框架: 404 on GET

    python - Pandas 分组并对整数和时间增量求和

    python - 在线程之间使用 pydispatch

    github - GitHub 存储库的快速 fork 链接

    javascript - 如何解析电子邮件文本的 "somebody wrote..."部分?

    r - Github Action 因 R CMD 检查而失败,使用旧提交?

    python - 交换功能输出与预期不同

    java - 将 .jar 文件添加到 git 存储库中

    azure - 无法部署到azure web应用服务

    github-actions - 使用 github actions 创建文件夹并将其上传到目的地