使用 conda 创建自定义 h5py 构建的逻辑方法

Logical way to create a custom h5py build with conda

我在 conda 中遇到一些包的设计问题。我已完成以下步骤以到达我所在的位置:

  1. 构建自定义版本的 hdf5(启用某些编译器标志)
  2. 构建自定义版本的 h5py(修改后从自定义版本的 hdf5 调用不同的 API。这只能使用我的自定义版本的 hdf5 正确构建。

所以我的问题是:

我想打包我为整个系统的开发和生产机器使用而构建的这个新包,我想知道这样做的最佳方法。我以前从未制作过 python|conda 包,所以我不知道最佳实践。

大多数关于该主题的在线文档似乎都在处理让 conda 为您构建包的问题。例如,我可以在构建目录中构建 h5py(来自 h5py 修改后的源代码),然后在其中添加元数据和构建文件,使其成为我的包。或者我会使用 anaconda/lib/python3.5/site-packages/h5py-2*.egg 中的安装目录作为我的新包的来源。

打包后(我假设使用 conda build 命令),它通常保存在私人服务器上,还是可以上传到 conda 云中。

我知道这是一个非常开放的问题,因此感谢所有帮助。

我将引导您完成创建自己的 hdf5 包的步骤

确保您使用的是最新版本的 conda:

(root) [root@west-world hdf5]# conda update conda

安装包 conda-build

(root) [root@west-world hdf5]# conda install -y conda-build

下载默认频道中存在的软件包食谱的官方存储库

(root) [root@west-world tmp]# wget -qO- https://github.com/ContinuumIO/anaconda-recipes/archive/4.3.0.tar.gz | tar -xvz
(root) [root@west-world tmp]# cd anaconda-recipes-4.3.0/hdf5/
(root) [root@west-world hdf5]# ls
bld.bat  build.sh  meta.yaml

编辑文件 build.sh 以添加自定义编译器标志

(root) [root@west-world hdf5]# vi build.sh

如果编译器标志需要更多依赖项,则将它们添加到 meta.yml 文件中需求部分的构建子部分。此外,将 url 更新为 https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.8.17/src/hdf5-1.8.17.tar.gz。由于这是旧版本,URL 已更改。

(root) [root@west-world hdf5]# vi meta.yaml

是时候开始构建包了。 (您可能需要使用系统包管理器安装 gcc)

(root) [root@west-world hdf5]# conda build .

如果一切顺利,将构建包,您将看到类似于以下内容的输出:

# If you want to upload package(s) to anaconda.org later, type:

anaconda upload /conda/conda-bld/linux-64/hdf5-1.8.17-1.tar.bz2

# To have conda build upload to anaconda.org automatically, use
# $ conda config --set anaconda_upload yes

anaconda_upload is not set.  Not uploading wheels: []



####################################################################################
Source and build intermediates have been left in /conda/conda-bld.
There are currently 2 accumulated.
To remove them, you can run the ```conda build purge``` command

安装 anaconda-client 包

(root) [root@west-world hdf5]# conda install -y anaconda-client

访问 https://anaconda.org/ 并在那里创建一个帐户。然后将刚刚创建的包上传到您的频道:

(root) [root@west-world hdf5]# anaconda upload /conda/conda-bld/linux-64/hdf5-1.8.17-1.tar.bz2
Using Anaconda API: https://api.anaconda.org
The action you are performing requires authentication, please sign in:
Using Anaconda API: https://api.anaconda.org
Username: nehaljwani
nehaljwani's Password: 
login successful
Using Anaconda API: https://api.anaconda.org
detecting package type ...
conda
extracting package attributes for upload ...
done

Uploading file nehaljwani/hdf5/1.8.17/linux-64/hdf5-1.8.17-1.tar.bz2 ... 
 uploaded 2003 of 2003Kb: 100.00% ETA: 0.0 minutes


Upload(s) Complete

Package located at:
https://anaconda.org/nehaljwani/hdf5

现在,下次您可以使用您的频道从您的频道下载并安装软件包

(root) [root@kun-lun ~]# conda install -c nehaljwani hdf5
Fetching package metadata ...........
Solving package specifications: .

Package plan for installation in environment /conda:

The following NEW packages will be INSTALLED:

    hdf5:  1.8.17-1      nehaljwani

现在,如果你想构建 h5py,过程几乎相同,但你必须确保在构建此包时,hdf5 包是从你的频道中获取的。为此,请确保您的频道具有最高优先级。

(root) [root@kun-lun ~]# conda config --prepend channels nehaljwani

现在,由于您还需要进行细微的修改,因此您可以通过在文件中创建补丁并将其添加到 meta.yml 文件的补丁子部分来创建补丁并在构建过程中应用它,就像这里的那个:https://github.com/ContinuumIO/anaconda-recipes/blob/master/h5py/meta.yaml

有关如何构建包的更多信息,请访问:https://conda.io/docs/build_tutorials/pkgs2.html#