いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

Pythonメモ-44 (conda に conda-forge チャネルを追加) (conda config, channel, 追加パッケージ)

概要

conda 使っていると、大体の有名どころのパッケージは見つかるのですが

当然、存在しないものもあります。いろんなページで、そういうときは pip でインストールすると記載されています。

例えば、私が個人的にめっちゃ使っているパッケージに pyperclip ってのがあって

これは、デフォルトでは 見つかりません。

~$ conda search --full-name pyperclip
Fetching package metadata ...........

PackageNotFoundError: Packages missing in current channels:
            
  - pyperclip

We have searched for the packages in the following channels:
            
  - https://repo.continuum.io/pkgs/main/osx-64
  - https://repo.continuum.io/pkgs/main/noarch
  - https://repo.continuum.io/pkgs/free/osx-64
  - https://repo.continuum.io/pkgs/free/noarch
  - https://repo.continuum.io/pkgs/r/osx-64
  - https://repo.continuum.io/pkgs/r/noarch
  - https://repo.continuum.io/pkgs/pro/osx-64
  - https://repo.continuum.io/pkgs/pro/noarch

無慈悲に 「そんなのねーよ」って返ってきます(´;ω;`)

で、んじゃ pip で入れるかってなる前に、anaconda コマンドでも探してみましょう。

~$ anaconda search pyperclip
Using Anaconda API: https://api.anaconda.org
Packages:
     Name                      |  Version | Package Types   | Platforms       | Builds    
     ------------------------- |   ------ | --------------- | --------------- | ----------
     alemack/pyperclip         |    1.5.9 | conda           | win-64          | py34_0, py33_0, py26_0, py27_0
                                          : A cross-platform clipboard module for Python. (only handles plain text for now)
     auto/pyperclip            |      1.3 | conda           | linux-64        | py27_0    
                                          : http://coffeeghost.net/2010/10/09/pyperclip-a-cross-platform-clipboard-module-for-python/
     bryanwweber/pyperclip     |   1.5.27 | conda           | linux-64, win-64, osx-64 | py36_0, py35_0, py34_0
     conda-forge/pyperclip     |   1.5.32 | conda           | linux-64, win-32, win-64, noarch, osx-64 | py_0, py36_0, py35_0, py27_0
                                          : A cross-platform clipboard module for Python. (only handles plain text for now)
     jim-hart/pyperclip        |   1.5.27 | conda           | linux-64, win-32, osx-64, linux-32, win-64 | py36_0, py34_0, py35_0, py27_0
                                          : A cross-platform clipboard module for Python. (only handles plain text for now)
     marciorf/pyperclip        |   1.5.11 | conda           | win-64          | py34_0    
                                          : A cross-platform clipboard module for Python. (only handles plain text for now)
     pypi/pyperclip            |    1.5.4 | pypi            |                 |           
                                          : Pyperclip is a cross-platform Python module for copy and paste clipboard functions. It works with Python 2 and 3.
     rogerramos/pyperclip      |   1.5.27 | conda           | linux-64        | py27_1    
                                          : A cross-platform clipboard module for Python. (only handles plain text for now)
     ssable/pyperclip          |   1.5.27 | conda           | win-64          | py35_0    
Found 9 packages

Run 'anaconda show <USER/PACKAGE>' to get installation details

あるじゃんってなります。

んで、何回も anaconda search してると、どの結果にも大抵でてくる以下のチャネルがあります。

conda-forge

conda-forge | community driven packaging for conda

トップページに

A community led collection of recipes, build infrastructure and distributions for the conda package manager.

と書いてある通り、github上で組織されているコミュニティ主体のパッケージコレクションです。

Anaconda Cloud で確認してみると

conda-forge :: Anaconda Cloud

公開しているパッケージ数がなんと 3500 オーバー(2017/12/09時点)

デフォルトで見つからないパッケージは、大抵こっちで見つかります。

チャネルの追加

で、毎回 conda-forge をパラメータに追加するのは面倒なので、conda-forge のページに記載されているように

デフォルトでconda-forgeも探しに行くように設定追加しましょう。

conda の設定を行う場合は、conda config を使います。

今のチャネル設定がどうなっているのかは以下のようにします。

~$ conda config --get channels
--add channels 'defaults'   # lowest priority

デフォルトのみが登録されてる状態。

チャネルを追加する場合は、以下のようにします。

~$ conda config --add channels conda-forge
~$ conda config --get channels
--add channels 'defaults'   # lowest priority
--add channels 'conda-forge'   # highest priority

無事追加されました。でも私の場合ですが

--addすると conda-forge が highest priorityになるので、ちょっと嫌。

デフォルトがまず優先されてほしいです。

なので、一旦さっきの設定を削除。

~$ conda config --remove channels conda-forge
~$ conda config --get channels
--add channels 'defaults'   # lowest priority

無事削除されました。

チャネルを追加する際に、今度は --append を使います。

~$ conda config --append channels conda-forge
~$ conda config --get channels
--add channels 'conda-forge'   # lowest priority
--add channels 'defaults'   # highest priority

これで、デフォルトが highest priorityの状態で conda-forgeチャネルの追加完了。

では、最初に見つからなかった pyperclip を再度検索。

~$ conda search --full-name pyperclip
Fetching package metadata .............
pyperclip                    1.5.27                   py27_0  conda-forge     
                             1.5.27                   py35_0  conda-forge     
                             1.5.27                   py36_0  conda-forge     
                             1.5.32                     py_0  conda-forge

次は、無事見つかりましたね。

.condarc

ちなみに、conda config は、ホームディレクトリの .condarc を編集しているだけなので

エディタで編集しても同じです。


過去の記事については、以下のページからご参照下さい。

サンプルコードは、以下の場所で公開しています。