使用 conda 安装附加功能
Installing extras using conda
在编写 setup.py
时,我可以指定 extras_require
并给出我的工具的附加功能所需的依赖项列表,如下所示:
setup(
name = "mypackage",
install_requires = ["numpy"],
extras_require = {
"plotting": ["matplotlib"],
}
)
我将我的包上传到 PyPI 和一个 conda 频道并尝试安装它,包括所有附加功能。我可以使用 PyPI 安装附加功能:
$ pip install mypackage[plotting]
但是,当我从 conda 安装我的包时,我无法安装附加功能。 conda 有类似的选项吗?
截至 2017 年 4 月 18 日,这目前是不可能的。参见 https://github.com/conda/conda/issues/3299 and https://github.com/conda/conda/issues/2984
我一般使用的解决方案就是把所有可能可选的都做成强制依赖。这往往会奏效,因为 conda 包可用于大多数平台,特别是对于常见的依赖项,如果依赖项不可用,编写 conda 配方并将其上传到 Anaconda.org 相对容易。
您可以通过为可选依赖项创建元数据包来完成此操作。 matploptlib-feedstock 就是一个很好的例子。这里有包含所有代码的主包 matplotlib-base
和依赖于 matplotlib-base
及其可选 Qt 依赖项的元包 matplotlib
。
考虑到 matplotlib
示例,您的配方中可以有以下输出:
package:
name: some_pkg
…usual recipe contents…
outputs:
- name: some_pkg
- name: some_pkg_with_optional_dep
requirements:
host:
- python
run:
- python
- optional_dependency
- {{ pin_subpackage('some_pkg', exact=True) }}
test:
imports:
- some_pkg
请注意,当您需要特定版本的可选依赖项时,您可以在可选包中指定它,但只有当您安装了 some_pkg_with_optional_dep
时才会应用版本限制。
要使可选依赖项的版本约束独立于 some_pkg_with_optional_dep
的存在,您应该在 run_constrained
部分中指定它:
requirements:
…
run_constraint:
- optional_dependency >=1.2
在编写 setup.py
时,我可以指定 extras_require
并给出我的工具的附加功能所需的依赖项列表,如下所示:
setup(
name = "mypackage",
install_requires = ["numpy"],
extras_require = {
"plotting": ["matplotlib"],
}
)
我将我的包上传到 PyPI 和一个 conda 频道并尝试安装它,包括所有附加功能。我可以使用 PyPI 安装附加功能:
$ pip install mypackage[plotting]
但是,当我从 conda 安装我的包时,我无法安装附加功能。 conda 有类似的选项吗?
截至 2017 年 4 月 18 日,这目前是不可能的。参见 https://github.com/conda/conda/issues/3299 and https://github.com/conda/conda/issues/2984
我一般使用的解决方案就是把所有可能可选的都做成强制依赖。这往往会奏效,因为 conda 包可用于大多数平台,特别是对于常见的依赖项,如果依赖项不可用,编写 conda 配方并将其上传到 Anaconda.org 相对容易。
您可以通过为可选依赖项创建元数据包来完成此操作。 matploptlib-feedstock 就是一个很好的例子。这里有包含所有代码的主包 matplotlib-base
和依赖于 matplotlib-base
及其可选 Qt 依赖项的元包 matplotlib
。
考虑到 matplotlib
示例,您的配方中可以有以下输出:
package:
name: some_pkg
…usual recipe contents…
outputs:
- name: some_pkg
- name: some_pkg_with_optional_dep
requirements:
host:
- python
run:
- python
- optional_dependency
- {{ pin_subpackage('some_pkg', exact=True) }}
test:
imports:
- some_pkg
请注意,当您需要特定版本的可选依赖项时,您可以在可选包中指定它,但只有当您安装了 some_pkg_with_optional_dep
时才会应用版本限制。
要使可选依赖项的版本约束独立于 some_pkg_with_optional_dep
的存在,您应该在 run_constrained
部分中指定它:
requirements:
…
run_constraint:
- optional_dependency >=1.2