如何托管我自己的私有 conda 存储库?

Posted

技术标签:

【中文标题】如何托管我自己的私有 conda 存储库?【英文标题】:How can I host my own private conda repository? 【发布时间】:2016-05-23 09:34:18 【问题描述】:

我有几个相互依赖的 python 项目。我对每个项目都有不同的发布版本,不同的项目可能依赖于特定项目的不同发布版本。我想在内部服务器上创建自己的 conda 存储库,在那里我可以将这些项目的版本作为 conda 包推送,其他项目可以从那里安装所需的版本。这可能吗?如果有怎么办?

【问题讨论】:

您有解决 https 托管的方法吗?甚至 S3? 我刚从 jfrog 获得了免费套餐 【参考方案1】:

您可以使用conda custom channel 作为您的私人仓库。基本步骤是使用“conda build”创建一个 conda 包,然后将该包复制到您的自定义频道(一个目录)中,然后在该目录上运行 conda index。然后,您可以使用“conda install -c”从该频道安装软件包。

一个例子,更详细地说,假设 linux-64:

创建频道:mkdir -p /tmp/my-conda-channel/linux-64

现在假设您有一些名为“abc”的项目,其中包含 meta.yaml 和 build.sh,其中包含某个版本 X。现在您构建它:

conda build abc

这将在您的 conda-bld 目录中构建一个 tar.bz2 文件。例如:~/miniconda3/conda-bld/linux-64/abc-X-py35_0.tar.bz2。将该文件复制到您的频道:

cp ~/miniconda3/conda-bld/linux-64/abc-X-py35_0.tar.bz2 /tmp/my-conda-channel/linux-64/

现在索引它:

conda index /tmp/my-conda-channel/linux-64/

您现在已将该软件包上传到您的自定义频道。您可以通过以下方式将其安装在任何 conda 环境中:

conda install -c file://tmp/my-conda-channel/ abc=X

回想一下,X 是版本,因此,一旦您在频道中放置了更多版本,您就可以安装特定版本。

如果您有一个项目依赖于“abc”的 X 版本,那么我们只需将其添加到该项目的 meta.yaml 中。示例:

package:
  name: some-other-project
  version: 0.1
requirements:
  build:
   - abc X
...

创建此频道后,最好将其添加到您的.condarc 文件中,以便自动搜索该频道。例如:

channels:
- file://tmp/my-conda-channel/   
- defaults

【讨论】:

有什么方法可以通过 http 访问您的频道? 这是有用的信息,但不能完全回答问题,问题是如何启动并运行(http)服务器,以便其他机器可以从那里提取包。 @Machiel 问题提到了内部服务器,但没有提到 http。答案可用于内部文件服务器。 这是一篇关于在 Docker 容器中运行 nginx 以服务 conda 通道的博客。 cityscience.com/blog/private-conda-channel.html @RolandWeber 的链接已失效:这是更新后的链接cityscience.com/news/2017-02-09-private-conda-channel【参考方案2】:

这有两个部分:如何创建频道和如何使用它。第二部分是最难做好的。

第一部分在conda documentation中有详细描述。 您可以直接从文件或通过静态网络服务器为频道提供服务。

要使用通道,一种方法是-c file://tmp/my-conda-channel/,但最近的 conda 版本允许通过 自定义通道 提供更好的解决方案,其中(最近?)添加到 conda。

文档可通过conda config --describe 获得,其中包括此部分:

# custom_channels (map: str)
#   A map of key-value pairs where the key is a channel name and the value
#   is a channel location. Channels defined here override the default
#   'channel_alias' value. The channel name (key) is not included in the
#   channel location (value).  For example, to override the location of
#   the 'conda-forge' channel where the url to repodata is
#   https://anaconda-repo.dev/packages/conda-forge/linux-64/repodata.json,
#   add an entry 'conda-forge: https://anaconda-repo.dev/packages'.
#
# custom_channels: 

没有记录添加频道的语法,但reading the source 正确的调用是:

conda config --set custom_channels.my-conda-channel file://tmp/

(注意:my-conda-channel/ 不是路径的一部分)。 将此添加到您的配置后,您现在可以像使用 conda-forge 或其他“内置”频道一样使用自己的频道:

conda install -c my-conda-channel my-cool-package

对于 MS Windows 设置中的任何人,将其与 Windows 共享一起使用的正确斜杠和反斜杠集是 file://\\SOMECORP\Corp\conda\channels\。很有魅力。

【讨论】:

【参考方案3】:

如果您想在 Windows 上添加频道,请尝试:

conda config --append channels file:///C:\tmp\my-conda-channel

确保您按照 Paul 和 Janus 的回答中的说明进行操作。

【讨论】:

以上是关于如何托管我自己的私有 conda 存储库?的主要内容,如果未能解决你的问题,请参考以下文章

我如何自己为多个用户托管 Mercurial 存储库?

如何使用气流 DockerOperator 提取我自己的私有存储库的 docker 映像?

在 github 存储库中托管私有 maven 工件

您可以为您的组织托管一个私有存储库以与 npm 一起使用吗?

私有,json文件托管[关闭]

ubuntu:如何使用 sudo 使用 composer 安装私有存储库