【问题标题】:Conda keeps trying to install all optional dependencies?Conda 一直在尝试安装所有可选依赖项?
【发布时间】:2017-11-22 23:32:41
【问题描述】:

安装 Theano anaconda 时会自动尝试安装 pygpu,尽管这是一个可选依赖项。我已经从我的 Windows 用户目录中删除了 .theanorc 文件。

在运行我的应用程序时,Theano 也会尝试从 GPU 加载。好像还记得什么?

conda install theano
Fetching package metadata .............
Solving package specifications: .

Package plan for installation in environment 
C:\Users\zebco\Miniconda3\envs\py35:

The following NEW packages will be INSTALLED:

libgpuarray: 0.6.9-vc14_0
pygpu:       0.6.9-py36_0
theano:      0.9.0-py36_0

Proceed ([y]/n)?

如您所见,我只指定安装 theano,但 conda 想要安装所有内容,包括可选依赖项。

【问题讨论】:

  • 这可能是因为这个 conda 包安装了这些依赖项。如果你想要它不同,你必须制作自己的 conda 构建,或通过 pip 安装。
  • 我现在已经尝试过了。不幸的是,它不起作用。结果相同
  • 是什么让你相信 conda 中的 pygpu 是可选的?你是怎么得出的?
  • @TarunLalwani 你可能有一点。我错了吗?是依赖吗?
  • @PrimeByDesign,详情请看我发布的答案

标签: python-3.x anaconda theano theano-cuda


【解决方案1】:

您认为pygpu 是可选的取决于您使用的包管理器。

常规 Python (pip)

如果您使用直接 Python 安装(使用 brew 或 Python 站点获得),那么您将使用 pip 安装 theano。这基本上来自

https://pypi.python.org/pypi/Theano/1.0.0

如果您下载文件并解压缩。打开setup.py,你会看到下面几行

install_requires=['numpy>=1.9.1', 'scipy>=0.14', 'six>=1.9.0'],

所以它们被设置为这个包的依赖项。这意味着当您安装theano 时,您还将获得numpyscipysix

Anaconda Python (conda)

现在来到 Anaconda python。 Anaconda 不使用 PyPI 或 pip 使用的包格式。它使用自己的格式。如果是 Anaconda,您应该使用 conda 来安装您需要的软件包,而不是 pip。

Conda 的频道只不过是一个包含一些可用软件包的存储库。您可以使用以下方式从任何渠道安装软件包

conda install -c <channel-name> <package-name>

默认频道是conda-forge。如果你看看那边的theano

https://anaconda.org/conda-forge/theano/files

然后下载并解压。将有一个info/recipe/meta.yml 文件。你会注意到下面的内容在同一个

requirements:
    build:
        - ca-certificates 2017.7.27.1 0
        - certifi 2017.7.27.1 py36_0
        - ncurses 5.9 10
        - openssl 1.0.2l 0
        - python 3.6.2 0
        - readline 6.2 0
        - setuptools 36.3.0 py36_0
        - sqlite 3.13.0 1
        - tk 8.5.19 2
        - xz 5.2.3 0
        - zlib 1.2.11 0
    run:
        - python
        - setuptools
        - six >=1.9.0
        - numpy >=1.9.1
        - scipy >=0.14
        - pygpu >=0.6.5,<0.7

它指定如果你想运行这个包,那么pygpu 也是它的依赖项之一。所以 conda 下载 pygpu 作为依赖项,您认为这是可选的(如果您使用常规 python 和 pip,这可能是正确的)

【讨论】:

    【解决方案2】:

    更新:
    通常,“可选依赖”是矛盾的。可选的东西不是依赖项,依赖项是另一个软件依赖于功能的软件包。
    如果依赖项不与包交互,除了一个未使用的原子化功能外,一个人可能没有依赖项。作为初学者,我建议你不要走这条路。

    我对 Theano 不是很熟悉,但是 Theano 可以使用系统的 GPU 来加速它的计算,在我看来 pygpugpulibarray 是实现这一点的原因功能。这意味着它不是可选的。

    如果您不希望使用 GPU 来加速计算,我相信 pygpu 是“可选的”(仅当 GPU 足够强大以对此有用时才这样做)。

    上面的 --no-deps 命令允许你安装一个没有依赖关系的包,但这很少是明智的,除非你真的知道他们在做什么。作为初学者,我不建议您走这条路。 Conda 专门设计用于确保科学软件包易于管理,安装所有必要的东西,没有任何大惊小怪或混乱。 pip 是一个通用的 python 包管理器,但不是专门为科学包构建的。

    如果您希望安装 theano 而不安装其依赖项,那么您可以选择以下三个选项之一:

    1. 使用conda install theano --no-deps
    2. 使用 pip 而不是 conda 安装它,使用 pip install theano。这将安装 theano、numpy、scipy 和六个,但不会安装 pygpu 和 libgpuarray。
    3. 为 Theano 创建一个自定义 conda 构建文件。文档位于:
      https://conda.io/docs/user-guide/tasks/build-packages/index.html

    原答案:

    您可能已经知道这一点,但请改用此命令:

    conda install theano --no-deps

    这不会安装包的依赖项。如果您已经安装了必要的依赖项,看起来,这应该适合您。

    libgpuarraypygpu 的依赖项。使用此命令开关都不会安装。

    您可以分享您编辑的.yaml 文件吗?

    【讨论】:

    • 我没有编辑任何 yaml 文件。不,我不知道以上我是初学者。我只是不明白为什么 conda 试图安装 pygpu。我不认为这是一个依赖。
    • 是什么让你认为它不是? “可选依赖”是矛盾的。如果某些东西是可选的,它怎么可能是依赖项?此外,您在对@maarten fabre 的评论中提到“我现在已经尝试过了。不幸的是它不起作用。结果相同。”,当他说您必须创建自己的 conda 构建时。您是如何在不编辑 yaml 文件的情况下创建自己的 conda 构建的?
    • 我不熟悉 Theano 的复杂性,但 Theano 允许使用 GPU 来加速数据处理,而 pygpu、libgpuarray 似乎是启用此功能的原因,这意味着它不是可选的。
    猜你喜欢
    • 2017-11-17
    • 2021-06-01
    • 2020-05-13
    • 2021-10-05
    • 2023-01-12
    • 2019-11-04
    • 1970-01-01
    • 2023-02-08
    • 2019-04-11
    相关资源
    最近更新 更多