1

我正在尝试构建一个由condaLinux 中的离线环境管理的包。我正在与py4j.

在我的在线构建服务器上:

  1. 我下载py4j食谱
  2. 并下载源分布 ( py4j-0.8.2.1.tar.gz)
  3. 将配方和源分发复制到离线 puppet 服务器

在我的离线人偶服务器上:

  1. 调整配方以指向我的源分发副本。
  2. condabuildpy4j− conda install –use-local py4j
  3. $ conda index linux-64

conda index linux-64py4j配置写入repodata.json. 我可以看到py4jrepodata.json. 还有一个 py4j-0.8.2.1-py27_0.json创建在/opt/anaconda/conda-meta/

我们有一个自定义频道映射到/srv/www/yum/anaconda_pkgs/

$ cat .condarc 
channels: 
- http://10.1.20.10/yum/anaconda_pkgs/

我可以看到py4j配置已添加到以下文件中:

./envs/_test/conda-meta/py4j-0.8.2.1-py27_0.json    
./pkgs/cache/ef2e2e6cbda49e8aeeea0ae0164dfc71.json    
./pkgs/py4j-0.8.2.1-py27_0/info/recipe.json    
./pkgs/py4j-0.8.2.1-py27_0/info/index.json    
./conda-bld/linux-64/repodata.json  ./conda-bld/linux-64/.index.json 
./conda-meta/py4j-0.8.2.1-py27_0.json

有人可以解释每个这些 json 文件应该做什么吗?

我还可以看到,其中有一个repodata.jsonand已更新.index.json/srv/www/yum/anaconda_pkgs/linux-64但没有py4j.

我手动将我的复制py4j-0.8.2.1.tar.gz到我的自定义仓库(频道)中/srv/www/yum/anaconda_pkgs/linux-64

我仍然无法conda install –use-local py4j从主机或 puppet agent -t. 我得到以下信息:

err: /Stage[main]/Anaconda::Packages/Anaconda::Install_pkg[py4j]/Package[py4j]/ensure: change from absent to present failed: Execution of ‘/opt/anaconda/bin/conda install –yes –quiet py4j’ returned 1: Fetching package metadata: .. 
Error: No packages found in current linux-64 channels matching: py4j

你可以在 Binstar 上搜索这个包

binstar search -t conda py4j
4

2 回答 2

1

我会回答你关于各种 json 文件的问题,但请注意,你真的不需要关心这些。

./envs/_test/conda-meta/py4j-0.8.2.1-py27_0.json

这是构建过程的残余。构建包后,将其安装到_test环境中,以便可以运行test您的部分中的操作。meta.yaml每个环境都有一个conda-meta目录,其中包含该环境中安装的每个包的元数据。

./pkgs/cache/ef2e2e6cbda49e8aeeea0ae0164dfc71.json

目录中的所有pkgs内容都是缓存。这是通道 repodata 的本地缓存,因此 conda 在“获取包元数据”时不必重新下载它(如果它没有更改)。

./pkgs/py4j-0.8.2.1-py27_0/info/recipe.json

同样,这是一个缓存。当p4js包安装在任何地方时,它会被解压到pkgs目录中。在包内,在info目录中,是包的所有元数据。此文件是用于创建包的配方中的元数据。Conda 不会在任何地方使用此元数据,它只是为了方便而包含在内。

./pkgs/py4j-0.8.2.1-py27_0/info/index.json

这是包本身包含的包的元数据。这conda index将用于创建repodata.json.

./conda-bld/linux-64/repodata.json

这是您构建的包的特殊通道的 repo 元数据(与 一起使用的通道--use-local,并由conda build自动使用。

./conda-bld/linux-64/.index.json

这是内部使用的特殊缓存文件conda index

./conda-meta/py4j-0.8.2.1-py27_0.json

这与第一个类似。它是您安装到根环境中的包的环境元数据。

于 2015-02-16T17:23:51.617 回答
1

--use-local只搜索conda-bld/linux-64频道。如果您将包移动到另一个本地频道,您需要将其~/.condarc channels作为file://url 添加到您的。

每当您将包添加到本地存储库时,您都需要conda index在该目录上运行。这将重新生成repodata.json文件。

于 2015-02-16T17:20:08.957 回答