【问题标题】:Specifying a repo for a specific package in pip在 pip 中为特定包指定 repo
【发布时间】:2020-08-30 03:38:17
【问题描述】:

我有一个私有托管的包,它与在 PyPi 上找到的公共包有名称冲突。不幸的是,因为公共版本高于我的私有包,一个简单的pip install <package_x> 命令会找到公共版本而不是我的私有托管包。

实际上:

PyPi (public) hosts package_x==1.5.0
PrivateRepo (private) hosts package_x==1.3.0

我希望pip install package_x 安装私有版本 1.3.0,而不需要我在 pip install 命令中指定版本或索引(纯粹通过配置文件。)

我正在尝试将我的 pip 配置设置为仅查看单个包的特定私有 repo,但同时查看私有 repo 和标准 https://pypi.python.org/simple/ repo 用于其他所有内容。我尝试将私有 repo 设置为我的 index-url,将 PyPi 设置为 extra-index-url,但这仍然会在两个存储库中搜索最新的包版本。

有没有在我的 pip 配置中指定用于给定包的特定 repo?理想情况下是这样的:

[global]
force-index: https://privaterepo.net/simple
    - package_x

【问题讨论】:

  • Pipenv 支持这一点,我怀疑 Poetry 也支持。您与pip 结婚了吗,还是愿意切换到更新的工具?
  • 不幸的是,我嫁给了 pip。我正在尝试在数十名工程师将使用 pip 的企业环境中进行设置。目标是尽可能简化他们的生活。
  • this article 所示,在不久的将来限制某些(私有)包的搜索存储库的能力将变得至关重要。
  • 仅使用配置是无法实现的。可以在here 找到包源选择的当前状态。这是 pip 自己的 github repo 上的相关问题:github.com/pypa/pip/issues/10156

标签: python pip pypi


【解决方案1】:

如果您使用 Pip,您可以在 requirements.txt 中添加 --extra-index-url 以指定其他存储库,如下所示:

--extra-index-url=https://your-private-pypi-repo.com/simple
Flask==2.0.2
helloworld==0.1.0

【讨论】:

    【解决方案2】:

    不幸的是 pip 不允许这样做。最接近这种情况的是在requirements.txt 文件中使用--index-url 选项来使用不同的索引,但这是一个全局选项,这意味着它会覆盖已定义的任何其他此类选项。

    最近还有其他可用的工具可以让我们对 python 依赖项及其来源进行精细控制

    诗歌

    第一个是Poetry,它在pyproject.toml 文件中为我们提供了这个选项。

    来自docs

    [[tool.poetry.source]]
    name = "foo"
    url = "https://foo.bar/simple/"
    secondary = true
    
    [tool.poetry.dependencies]
    python = "^3.9"
    requests = {version="*", source="foo"}
    maya = {version="*", source="pypi"}
    records = "*"
    

    上面添加了一个名为 foo 的新包 repo 到您的源列表中,但仍将 pypi 作为主要源。 文档还解释了如何完全 ignore pypi 并使用您的私人仓库作为软件包的唯一来源。

    tool.poetry.dependencies 部分,我们还指定了三个包以及它们的安装位置:

    • requestsfoo 安装
    • mayapypi 安装
    • records 默认从 pypi 安装

    Install 的依赖项:

    poetry install --no-root
    

    您还可以使用--source 选项到poetry add requests 来指定要使用的源

    流水​​线

    您可以使用Pipenv 来完成此操作。

    docs,将以下内容添加到您的Pipfile

    [[source]]
    url = "https://pypi.org/simple"
    verify_ssl = true
    name = "pypi"
    
    [[source]]
    url = "http://pypi.home.kennethreitz.org/simple"
    verify_ssl = false
    name = "home"
    
    [dev-packages]
    
    [packages]
    requests = {version="*", index="home"}
    maya = {version="*", index="pypi"}
    records = "*"
    

    上述允许您从pypi 安装maya,而requests 将从自定义/私有包索引安装。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-27
      • 1970-01-01
      • 2016-12-03
      • 1970-01-01
      • 1970-01-01
      • 2015-09-23
      • 2019-06-01
      相关资源
      最近更新 更多