如何从 PyPI 获取最新的 sdist link

How to get latest sdist link from PyPI

我想在 conda 构建配方中为 meta.yaml 获取 sdist url。它需要从 URL 获取特定版本或最新版本。正如我对 CI/CD 使用 Github 操作一样,我需要自动检索特定版本或最新版本的源 link。

现在 link 是这样的:https://files.pythonhosted.org/packages/40/e7/sha-256-of-file/file I need something reliable like https://hosting/package/release/file

我需要知道一种更可靠的方法来检索最新的 sdist 或特定版本的 sdist。有什么办法可以做到这一点,或者我需要走另一条路?

到目前为止,这个问题对我没有用,因为我不打算在 python 中安装它。我需要将其包含在 conda-build 的 meta.yaml 配方中。

meta.yaml 看起来像这样:

{% set version = "0.1.1rc3" %}

package:
  name: blablablah
  version: {{ version }}

source:
  url: 
  sha256: f3832918bc3c66617f92e35f5d70729187676313caa60c187eb0f28b8fe5e3b5

build:
  noarch: python
  number: 0
  script: python -m pip install --no-deps --ignore-installed .

requirements:
  host:
    - python
    - pip
    - numpy==1.16.5
    - cython
  run:
    - python

test:
  imports:
    - blablablah

about:
   here are information about the package

我不知道从哪里获取此文件,因为代码更新 hourly 并且无法手动升级。

如果知道确切的项目名称和版本,可以使用下面的URL结构:

project_name = "..."
version = "..."
url = f"https://files.pythonhosted.org/packages/source/{project_name[0]}/{project_name}/{project_name}-{version}.tar.gz

例如

https://files.pythonhosted.org/packages/source/p/pip/pip-20.0.1.tar.gz

如果不知道最新版本,可以使用PyPI JSON API获取:

>>> import requests
>>> resp = requests.get('https://pypi.org/pypi/pip/json').json()
>>> resp['info']['version']
'20.0.1'

注意:不能保证给定版本的源分发存在,尽管它很可能存在。