我最近加入了一家初创公司,负责为我们的内部 Python 库设置包管理。我们从事生物技术和机器学习领域,我们使用的很多包都是在 conda 频道上建立的索引。
我们目前的设置是从 GitHub 安装我们的本地存储库,这些存储库使用 setup.py 构建。最初,我认为我们应该只使用 poetry 来进行所有包管理,对于我们自己的任何私有库,都应设置 aws codebuild/artifact 来托管我们的库。我仍然认为这似乎是在 python 中进行包管理的最佳选择。
另一方面,我们需要的软件包太多了,这些软件包在 conda 生态系统中可用,但在 pypi 上却不可用。我们现在注意到,当尝试同时使用 pip 和 conda 时,两者之间存在多个依赖项冲突。因此,我们不妨完全倾向于使用 conda 生态系统。
为了做到这一点,我认为一个好主意是使用私有的 conda 频道来存放我们自己的任何库,并使用 conda-forge 来存放我们可能需要的来自 pip 的任何存储库。如果出于某种原因我们在 conda-forge 上找不到包,似乎有一个非常简单的过程可以遵循,可以从 pypi 那里获取它。
我的问题是:以前有人托管过自己的 conda 频道吗?
我还没有找到任何关于标准方法的报告/指南,这让我感到非常惊讶,因为我不可能是唯一遇到这个问题的人。据我所知,artifactory 是可用于实现这一点的最适合企业的解决方案,但我很好奇是否有我以前没有见过的东西,以及其他人是否也遇到了这个问题。
我已经看到并尝试过以下选项:
- AWS:https://docs.aws.amazon.com/sagemaker/latest/dg/train-remote-decorator-private.html
- Azure:https://learn.microsoft.com/en-us/azure/synapse-analytics/spark/apache-spark-custom-conda-channel#create-a-sample-conda-environment-configuration-file
- 使用 S3 存储桶作为 Web 服务器来创建频道 -https://jfrog.com/help/r/jfrog-artifactory-documentation/conda-repositories
- 使用anaconda:https://server-docs.anaconda.com/en/latest/user/3rdParty.html
- quertz:https://github.com/mamba-org/quetz
使用 AWS 和 Azure 解决方案的唯一方法是从 s3 本地挂载文件以便正确使用通道,这似乎不是使用 conda 通道的正确方法,更不用说它涉及下载存储桶中的所有/大多数文件以便正确索引通道。
anaconda 和 quertz 解决方案看起来像是从安装 s3 存储桶迈出的一步,但它们不允许联合登录,至少不是本机的,这导致使用某些artifactory或某些等效工具。
以下是我们当前所做的 environment.yml 文件的样子。
name: package
channels:
- conda-forge
- bioconda
- defaults
dependencies:
- awscli=1.27.134
- pip
- python=3.10.11
- pip:
- GitHub.com/internal_repo/version/files.tar.gz
- other pip dependencies
这是以下帖子的转发:https://www.reddit.com/r/Python/comments/15bw2gn/python_packaging_with_conda/ https://www.reddit.com/r/learnpython/comments/15bw310/python_packaging_with_conda/
我检查过的其他资源: