从没有默认包的文件创建 conda 环境

Jan*_*yka 5 python conda

我正在尝试从文件创建 conda 环境environment.yml

conda env create -f environment.yml
Run Code Online (Sandbox Code Playgroud)

这有效,但我想避免安装默认包

我找到了标志--no-default-packages但这仅适用于conda create并且此命令不接受该environment.yml文件。

有没有办法如何使用environment.yml和不安装默认包?

编辑: 我的最终目标是创建可以打包(或环境的站点包)作为 AWS 的 lambda 的环境。但似乎 conda 安装的每个包都太多了。

例如:

bash-4.2# conda create --name test
bash-4.2# source activate test
(test) bash-4.2# conda install networkx
Fetching package metadata .........
Solving package specifications: .

Package plan for installation in environment /root/miniconda3/envs/test:

The following NEW packages will be INSTALLED:

    certifi:    2016.2.28-py36_0
    decorator:  4.1.2-py36_0
    networkx:   1.11-py36_0
    openssl:    1.0.2l-0
    pip:        9.0.1-py36_1
    python:     3.6.2-0
    readline:   6.2-2
    setuptools: 36.4.0-py36_1
    sqlite:     3.13.0-0
    tk:         8.5.18-0
    wheel:      0.29.0-py36_0
    xz:         5.2.3-0
    zlib:       1.2.11-0
Run Code Online (Sandbox Code Playgroud)

为什么这个命令会安装Pythonpip等包?这些是networkx 的真正依赖吗?

另一方面,如果我这样做,pip install -t . networkx它会按预期安装networkx

mer*_*erv 0

有没有办法使用environment.yml而不安装默认包?

只有该conda create命令使用create_default_packages. conda env create设计上已经忽略了配置create_default_packages

例如,我刚刚检查了添加git到默认包,然后从 YAML 创建了一个wget仅具有依赖项的环境,但它没有安装git.


为什么这个命令要安装Python、pip和其他包?这些是真正的依赖关系吗networkx

是的,这些是实际的依赖关系。它们可能是依赖项的依赖项(等等),但它们是networkx根据包构建器安装和运行所需的内容。


...如果我pip install -t . networkx这样做,它只会安装networkx

与 的比较pip install具有误导性。CLI命令pip install本身是模块定义的入口点pip。等效的命令是:

python -m pip install networkx
Run Code Online (Sandbox Code Playgroud)

这清楚地表明了一个事实,即networkx如果没有python和就无法安装pip

请记住,Conda 从一开始就被设计为对非 Python 依赖项提供更广泛的支持,从而促进与主机系统级库的更多独立性。因此,您应该预期会有更多依赖项,尤其是那些永远不会出现在仅使用 PyPI 的 Python 系统中的依赖项。