Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何托管自己的私有conda存储库?_Python_Pip_Anaconda_Pypi_Conda - Fatal编程技术网

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

Python 如何托管自己的私有conda存储库?,python,pip,anaconda,pypi,conda,Python,Pip,Anaconda,Pypi,Conda,我有几个相互依赖的python项目。每个项目有不同的发布版本,不同的项目可能依赖于特定项目的不同发布版本。我想在一个内部服务器上创建我自己的conda存储库,在那里我可以将这些项目的版本作为conda包推送,其他项目可以从那里安装所需的版本。这可能吗?如果是这样的话,怎么办?您可以使用a作为您的私人回购。基本步骤是使用“conda build”创建一个conda包,然后将该包复制到自定义通道(目录)中,现在在该目录上运行conda index。然后,您可以使用“conda install-c”从

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

您可以使用a作为您的私人回购。基本步骤是使用“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是版本,因此,一旦您在频道中放置了更多版本,就可以安装特定的版本

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

package:
  name: some-other-project
  version: 0.1
requirements:
  build:
   - abc X
...
创建此频道后,最好将其添加到文件中,以便自动搜索。例如:

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

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

第一部分在本文中详细介绍。 您可以直接从文件或通过静态Web服务器为频道提供服务

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

文档可通过
conda config--description
获取,其中包括以下部分:

# 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: {}
没有记录添加通道的语法,但正确的调用是:

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共享中使用此设置的正确斜杠和反斜杠集是
文件://\\SOMECORP\Corp\conda\channels\
。很有魅力。

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

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

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

有什么方法可以通过http访问您的频道?这是有用的信息,但不能完全回答问题,问题是如何获取(http)服务器启动并运行,以便其他机器可以从那里提取包。@Machiel问题提到的是一个内部服务器,而不是http。答案可以用于内部文件服务器。下面是一个关于在Docker容器中运行nginx以服务conda频道的博客@罗兰德韦伯的链接已经腐烂:这是更新的链接你有https托管的解决方案吗?甚至S3?