Search code examples
python-3.xanacondatheanotheano-cuda

Conda keeps trying to install all optional dependencies?


When installing Theano anaconda automatically tries to install pygpu despite this being an optional dependency. I have deleted the .theanorc file from my windows user directory.

Also when running my application Theano tries to load from the GPU. It's like it remembers somehow?

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)?

As you can see I've only specified to install theano yet conda wants to install everything including optional dependancies.


Solution

  • Your assumption that pygpu is optional is dependent on the package manager you are using.

    Regular Python (pip)

    If you are using a direct Python install (obtained using brew or Python site) then you would be using pip to install theano. This basically comes from

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

    If you download the file and unzip it. Open setup.py, you will see below lines

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

    So they are set as the dependencies for this package. Which means when you install theano you will also get numpy, scipy and six.

    Anaconda Python (conda)

    Now coming to Anaconda python. Anaconda doesn't use a package format that PyPI or pip uses. It uses its own format. In case of Anaconda you should be using conda to install the packages you need and not pip.

    Conda has channels which is nothing but a repository which has some packages available. You can install a package from any channel using below

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

    The default channel is conda-forge. If you look at the theano package over there

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

    And download and extract it. There will be a info/recipe/meta.yml file. You will notice below content in the same

    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
    

    Which specifies that if you want to run this package then pygpu is also on of its dependencies. So conda downloads pygpu as a dependency which you though was optional (which is probably true if you were using regular python and pip)