当前位置: 首页 > 知识库问答 >
问题:

pip:优先处理私有pypi服务器

程昕
2023-03-14

我正在使用艺术工厂来托管大量的Python模块。有几次,https://pypi.python.org/pypi上的一个新的python模块将以相同的名称上传。当有人试图使用pip安装我的一个模块时,这会导致问题。默认情况下,pip首先查找公共包。

以下是我尝试过的:

1.我试过修改我的密码。pypirc文件,

[distutils]
index-servers=
        artifactory
        pypi

有两个索引服务器的适当条目,但我相当肯定pip忽略了这些信息。

2.我尝试手动指定使用哪个索引服务器。

我可以指定--索引url--额外索引url,但当公共包的版本号高于我的私有包时,后者没有帮助。如果我指定前者,则无法找到公共依赖项!好像我赢不了似的。

3.我已尝试在设置中指定依赖项链接。皮耶。

... 但这是不推荐的,因为这个答案是:pip忽略设置中的依赖关系链接。派克

如何配置pip,使其更喜欢我的人工库而不是公共库?


共有2个答案

程飞星
2023-03-14

❌ 不要这样做❌.<我只是把它作为背景,但正如人们所指出的,这是不安全和错误的。

你能检查一下这是否有效吗

pip3 install --index-url https://artifactory.your.company.com/artifactory/api/pypi/your-pypi-here/simple --extra-index-url https://pypi.python.org/simple coolpackage

这个可以放在~/里面。皮普/皮普。conf设置此默认值。

[global]
index-url = https://artifactory.your.company.com/artifactory/api/pypi/your-pypi-here/simple
extra-index-url = https://pypi.python.org/simple

那你就可以了

pip install coolpackage
苗康平
2023-03-14

这是不可能实现的。

pip开发人员已经声明,所有包索引始终具有相同的优先级,这一点不会改变。

https://github.com/pypa/pip/issues/8606#issuecomment-788754817
https://github.com/pypa/pip/issues/8606#issuecomment-665554122

从每个包选择要下载的索引。

在两个索引中(无论它们是如何指定的),如果其中一个具有更高版本的包,则将选择该索引。如果两个版本相同,那么选择是以某种未指定且不稳定的顺序进行的,这种顺序可能碰巧适合您。

如果您处于某种情况下,事情似乎“起作用”,请注意,另一个索引(如果不受您控制)可以随时发布更高的版本,而用户将以隐式方式获得该版本
当两个索引中只有一个当前具有某个包时,同样适用:每当另一个索引决定以该名称发布包时,用户可以隐式切换到该索引。

https://github.com/pypa/pip/issues/8606#issuecomment-776623044

pip开发人员推荐的解决方案是直接对所有内容使用您自己的包索引。通常这可能意味着首先镜像所有PyPI,但实际上这并不是必需的,因为有一些实现(例如“simpleindex”)可以显式地根据所属的包将请求代理到不同的目标。因此,这将是实际的完整解决方案。

https://github.com/pypa/pip/issues/8606#issuecomment-835201448

另一个常见的建议是提前在PyPI上注册相同的包名,不要在那里上传任何东西,只是为了拥有它,从而防止名称占用攻击。(虽然这只解释了PyPI是唯一涉及的公共索引的情况。一般来说,您需要预测您将依赖的所有公共索引,并在所有这些索引上注册)。

https://github.com/pypa/pip/issues/8606#issuecomment-822701285

免责声明:我不参与Pip,只是总结了我在相关问题和相关问题中阅读的信息。

 类似资料:
  • 我创建了本地pypi服务器。我上传了我的项目需要的软件包,但是当尝试执行

  • 问题内容: 关于Python 3.x,easy_install,pip和存储库(pypi.python.org)的当前状态如何? 是否有easy_install和/或pip版本可以从那里安装正确版本的软件包?否则,他们期望很快吗? 问题答案: PyPi本身支持Python3。setuptools软件包提供了与Python 3一起使用的easy_install版本。 根据pip页面,pip从v 1.

  • 我在AnyLogic中开发了货运领域的离散事件模型。我有一个名为“truck”的代理,我在其页面和命令中定义了一个名为“冰箱”的参数

  • 我在集群中有一个Hazelcast客户端和两个Hazelcast服务器,每个服务器包含单个复制的Map。 我给客户端2个hazelcast服务器节点,以便从replicatedMap中读取。 我是否可以将连接优先级赋予一台服务器,并在连接处于活动状态时从该服务器读取数据? 为了澄清,假设有MasterServer、SlaveServer和Client。 如果复制地图操作之间存在连接,我们是否可以强

  • 4.4.1.1 创建/使用私有服务 私有服务是不能由其他应用启动的服务,因此它是最安全的服务。 当使用仅在应用中使用的私有服务时,只要您对该类使用显式意图,那么您就不必担心意外将它发送到任何其他应用。 下面展示了如何使用startService类型服务的示例代码。 要点(创建服务): 将导出属性显式设置为false。 小心并安全地处理收到的意图,即使意图从相同应用发送。 由于请求应用在同一应用中,

  • 示例:                               >>>服务B(获取消息) 服务A>推送消息>>>服务B(不应接收消息,已复制)                         >>>服务C(获取消息) 我认为它是“路由”和“工作队列”的组合,我需要什么? 但我怎样才能正确地做到这一点呢?我使用node.js或C#(如果您有示例的话)。