在 pip 中为特定包指定 repo

Bra*_*ell 11 python pip pypi

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

有效:

PyPi (public) hosts package_x==1.5.0
PrivateRepo (private) hosts package_x==1.3.0
Run Code Online (Sandbox Code Playgroud)

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

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

无论如何要在我的 pip 配置中指定用于给定包的特定存储库?理想情况下是这样的:

[global]
force-index: https://privaterepo.net/simple
    - package_x
Run Code Online (Sandbox Code Playgroud)

cra*_*y_p 5

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

--extra-index-url=https://your-private-pypi-repo.com/simple
Flask==2.0.2
helloworld==0.1.0
Run Code Online (Sandbox Code Playgroud)


sma*_*c89 3

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

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

诗歌

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

来自文档

[[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 = "*"
Run Code Online (Sandbox Code Playgroud)

上面添加了一个新的包存储库,调用foo到您的源列表,但仍保留pypi为主要源。该文档还解释了如何完全忽略pypi并使用您的私人存储库作为包的唯一来源。

在本tool.poetry.dependencies节中,我们还指定了三个软件包以及它们的安装位置:

  • requests安装自foo
  • maya安装自pypi
  • records默认安装自pypi

安装依赖项:

poetry install --no-root
Run Code Online (Sandbox Code Playgroud)

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

皮彭夫

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

文档中,将以下内容添加到您的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 = "*"
Run Code Online (Sandbox Code Playgroud)

maya上面的内容允许您从进行安装pypi,而requests将从自定义/私有包索引进行安装。