avast高级版许可证_Anaconda高手必知必会:学习Conda高级特性(下)

本文来自 Continuum Analytics 官方博客,作者 Aaron Meurer。前几天发布了上篇,这是第二部分,推荐继续收藏阅读。

本文译者为 strugglingyouth,校对 EarlGrey。希望对大家使用 Conda 有帮助。

在上篇中,我们学习了 --help、配置、conda update --all、conda list --exportconda create --file、conda clean 和钉包(pinning package)。在本文中,我们将介绍一些能够简化包构建过程的工具,学习更多有助于管理环境和在命令行下更有效使用 conda 的特性。

conda skeleton

将现有的包构建成 conda 感觉上会有很多重复工作,因为它要求重写包的所有元数据,但这些数据之前就已经写过了。对于已经发布在 PyPI 上的 Python 包尤其如此。

conda skeleton 命令将生成一个骨架(skeleton)配方,然后你可以将其编辑完整。通常自动生成的文件就足够好了,没必要进行额外修改。

conda skeleton pypi 将在当前目录下为 创建一个配方。例如,conda skeleton pypi pyinstrument 将为 pyinstrument 包创建一个骨架。

--recursive 选项将在当前目录中为依赖包递归创建配方。当运行 conda build 时,若配方中缺少依赖,它会在当前目录下查找其对应的配方,并会自动递归地其创建依赖。

conda skeleton 也支持构建来自 CPAN 的 Perl 包,使用 conda skeleton cpan 即可。例如,conda skeleton cpan Math::Prime::Util 将为 Math::Prime::Util 生成一个骨架配方。

由 skeleton 命令生成的 meta.yaml 有几个注释,方便你扩展或修正生成的配方。

以后,skeleton 命令可能会增加从除了 PyPI 和 CPAN 之外的其他源中生成骨架配方的功能。

conda convert

在系统级包管理器中 Conda 是特殊的,因为它能够跨平台:它在 Windows,Mac OS X 和 Linux 上的工作方式完全相同。然而,尽管命令在所有平台上都以相同的方式工作,但每个系统都需要完全不同的包。对于大多数软件包,这是必要的:一个 Python 二进制包如果运行在 Linux 上则不一定能运行在 Windows 上。但对于只有 Python 代码的包,同一个编译包理论上在所有的系统上都能工作。这并不完全正确,这是因为一些细微的差别,例如,在 Windows 上 Python 包的目录结构是不同于 Unix 系统的。但转换起来很简单,它可以自动完成。

conda convert 命令将一个平台上构建的纯 Python 包转换为可以在其他平台上工作。使用方式如下所示:

$ conda convert sympy-0.7.5-py34_0.tar.bz2 --platform win-32 --platform win-64

这会创建 win-32win-64 两个子目录并将转换后的包放在里面。子目录的创建是由于包在所有平台上应该使用相同的文件名。

你也可以使用 --platform all 来生成 conda 所支持五大平台的包:win-64、win-32、osx-64、linux-64linux-32-o 选项用来改变输出的目录。

conda convert 命令目前只支持将 conda 包从一个平台转换到另一个平台,但它会不断增加将其他种类的包转换为 conda 包的方法。目前,conda convert 也能将 Christoph Gohlke 上的 .exe 安装程序转换成 conda 包。要做到这一点,运行:

$ conda convert sympy-0.7.5.win32-py3.3.exe

conda 元包

元包是不包含任何文件,只有元数据的包。如果你需要一个抽象的包,其依赖关系是将要实际安装的包,或者本身将是其他包的抽象依赖,那么元包就非常有用。例如,在 Anaconda 中,ipython-notebook 就是一个元包。包本身不包含任何文件,但它有安装 notebook 所需的所有依赖,比如 ipython、pyzmq、tornadojinja2

元包可以通过在 meta.yaml 中创建一个包含必要元数据的配方的方式创建,但你也可以使用 conda metapackage 命令从命令行创建一个完整的元包。

metapackage 命令使用方式如下所示:

$ conda metapackage packagename 1.0

包名称和版本是必需的,但有几个选项可以添加其他元数据,如依赖项。

ff509a8d657c5a694ea0862d5e76dd1d.png

ipython-notebook 创建元包的命令如下所示:

5727e20df2ef8c7e96986e2d478b1202.png

bdist_conda

如果你是一个 Python 软件包的维护者,你可能觉得构建一个 conda 配方有点多余,因为在配方中所需的元数据已在 setup.py 指定。除了构建和维护一个单独的配方之外,另一种方法是使用 setup.py bdist_condabdist_conda 是 distutils 的一个扩展,安装 conda-build 包时会一起安装,因此你需要一个 root 环境中的 conda 版 python,并且已安装了 conda-build。使用方式如下:

$ python setup.py bdist_conda

这会运行构建过程,并会生成一个 conda 配方,但它将会使用 setup.py 中的元数据和安装说明。

还可以在 setup() 函数设置特定的 conda 选项,如构建号和构建字符串。更多信息,参见 bdist_conda 文档。

子命令

Conda 可使用自定义命令进行扩展。PATH 上任何以 conda- 开始的可执行文件都将作为 conda 的子命令。例如,如果你有一个名为 conda-mycommand 的可执行文件,conda mycommand 将调用 conda-mycommand 命令。conda --help 还将解析来自此命令(它假定 argparse 的帮助格式)的帮助信息。许多 conda 自带的命令实际上就是子命令,像 conda-buildconda-skeleton。这样就可以把它们放在一个单独的包中(conda-build),能够单独安装和移除。

注意,如果你想在子命令中使用 conda 的功能,建议使用 conda-api。见下面的章节。

Bash tab 补全

如果你使用 Bash,你可以通过以下操作使用 tab 自动补全:安装 argcomplete 包(conda install argcomplete),并在 bash profile (通常是 ~/.profile~/.bashrc) 中添加

eval "$(register-python-argcomplete conda)"

如需测试是否生效,可以打开一个新的终端窗口或标签,并输入:

$ conda ins

它会补全为:

$ conda install

可以补全选项或者参数,以后也会加入补全包名的功能。

历史记录

Conda 会记录当前环境中运行过的所有命令,以及所导致的包修改。你可以通过下面的命令查看所有更改:

$ conda list --revisions

举个例子:

80c18259dca3c9386f55a8cfe46f1e78.png

注意每一次修改都有一个编号。我们可以使用 conda install --revision,回滚到以前的版本。

d871df8f228b4c113f649d9bae212708.png

修订历史记录存储在当前环境下的 conda-meta/history 文件中。这个文件还跟踪了在每个版本中使用的命令。

43d2a24412ec59ab2286c8c1d151025a.png

conda-api

如果你想自己写代码来扩展 conda,建议使用 conda-api;通过 conda install conda-api 来安装。这个 API 以子进程的方式调用 conda ,并使用 --json 选项来解析 JSON 输出。如果你想在非 Python 项目中使用 conda,你也可以使用 --json 选项,这是非常有用的。

用 conda-api 或 --json API 优于直接使用 conda,因为 conda 的命令行输出格式不是固定的,但是 --json 输出的结构不会改变。它通常也更容易解析。

强烈建议不要从一个 Python 项目内 import conda。有两个原因。首先,conda 的 Python API 不保证能稳定使用。第二,任何将 conda 作为一个 Python 库导入的代码,必须是在该根环境下使用 conda 来安装的,因此不能被安装到任意的 conda 环境中。但使用 conda-api 的代码则可以被安装到任何 conda 环境中。

结语

学习 Conda 高级特性这个系列文章到这里就结束了。conda 是开源的(BSD 许可证),我鼓励每一个读者为其做出贡献。conda 和 conda-build 的源代码在 GitHub 上。我也鼓励人们贡献 conda 配方到 conda-recipes 仓库。欢迎加入 conda 邮件列表来讨论 conda。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值