Anaconda(Conda)環境でpipがインストールされたパッケージを追跡するにはどうすればよいですか?


141

Anaconda Pythonディストリビューションをインストールして使用しており、Anaconda(Conda)環境の使用を開始しました。標準のconda install...コマンドを使用して、ディストリビューションから自分の環境にパッケージを配置できますpip installが、アクティブな環境で使用する必要がある外部(つまり、Flask-WTF、flask-sqlalchemy、およびalembic)を使用できます。しかし、環境のコンテンツをディレクトリで見ると、conda listこれらのpip installedパッケージを使用しても表示されません。

を使用してpip freezepip listこれまでにインストールしたすべてのパッケージを一覧表示します。

Anaconda envのそれぞれ(インストールされているものpipと両方conda)の内容を追跡する方法はありますか?


7
pipと一緒condaにインストールして使用し~/anaconda/bin/pipます。これを使用して、パッケージをconda環境にインストールし、これpipとでインストールされたパッケージの結合を確認しconda installます。
osa

7
conda listしばらくの間、他の方法でインストールされたpythonパッケージが含まれています(たとえば、pip、easy-install、直接python setup.py install等で)
kalefranz

1
PIPをアップグレードしないでください。アップグレードすると、このエクスポートが失敗します
Andrew Cassidy

回答:


120

conda-envがこれを自動的に実行するようになりました(pipがcondaでインストールされている場合)。

環境の移行に使用されるエクスポートツールを使用して、これがどのように機能するかを確認できます。

conda env export -n <env-name> > environment.yml

ファイルには、condaパッケージとpipパッケージの両方がリストされます。

name: stats
channels:
  - javascript
dependencies:
  - python=3.4
  - bokeh=0.9.2
  - numpy=1.9.*
  - nodejs=0.10.*
  - flask
  - pip:
    - Flask-Testing

環境のエクスポートを続行する場合はenvironment.yml、新しいホストマシンに移動して実行します。

conda env create -f path/to/environment.yml

64

condaインストールしたパッケージのみを追跡します。またpippipインストーラー自体を使用してインストールされたパッケージ、またはcondaビルドで生成された卵情報を使用setuptoolsしたパッケージが表示されsetup.pyます。したがって、基本的に3つのオプションがあります。

  1. conda listおよびの結合をpip freeze使用して、パッケージマネージャーcondaで(に表示されるconda list)を使用してインストールされたcondaパッケージと、でインストールされるpip(には表示されるpip freezeが表示されないconda list)パッケージを管理できますpip

  2. ご使用の環境にのみインストールしpythonpipdistributeパッケージ化してすべてを管理しますpip。(Windowsを使用している場合、これはそれほど簡単ではありません...)

  3. 独自のcondaパッケージを作成し、ですべてを管理しますconda

condaパッケージをビルドするのは非常に簡単なので、私は個人的に3番目のオプションをお勧めします。Continuumのgithubアカウントには、レシピ例のgitリポジトリがあります。しかし、通常は次のようになります。

 conda skeleton pypi PACKAGE
 conda build PACKAGE

あるいは単に:

conda pipbuild PACKAGE

また、一度ビルドしたら、https://binstar.org/にアップロードして、そこからインストールできます。

次に、すべてを使用して管理しcondaます。


3
私はちょうどしようとした~/anaconda/bin/pip install memory-profilerconda install numba、彼らは両方に示されています~/anaconda/bin/pip freeze
osa

2
Continuumのgithubアカウントにあるレシピ例のgitリポジトリ」github.com/ContinuumIO/anaconda-recipesですか?可能であればリンクしてください
エンドリス

ただし、これは実際にはパッケージをインストールしないため、インポートできます。あなたはしなければならないconda install C:\...PACKAGE-0.0.0-py27_0.tar.bz2で説明したようにstackoverflow.com/a/20750388/125507
endolith

私は最初にconda install python=3.x.y、その後のpipインストールがcondaインストールされたpipを通過するように、常にconda環境にいると思います。
Ustaman Sangat

24

condaのブランチ(new-pypi-install)があり、pipおよびPyPIとの統合が向上しています。特に、condaリストにはpipがインストールされたパッケージも表示され、conda installは最初にcondaパッケージを見つけようとし、失敗するとpipを使用してパッケージをインストールします。

このブランチは、condaのバージョン2.1がcondaとのより優れたpip統合を実現するように、今週後半にマージされる予定です。


2
これはconda 2.2.3で(そしておそらくその前に)すでに機能していることを指摘しておきます。それが機能する方法は、あなたconda install packageがコンダのレシピを見つけようとしても見つけられない場合、それを介してそれをインストールしようとするpip(そしてそれを追跡する)ということです。pip環境にインストールされていない場合でも、インストールを提案します。トラビス、ありがとうございました!
jorgeca 2013

5
明確にします。これは何度か読み違えたためです。@Travisは、conda内で実行されている場合、pipを実行すると最初にcondaパッケージを検索すると思いますか?逆は間違いなく真実ではありません-conda installはpypiパッケージを探しません。pypi.binstar.orgのアイテムさえ探しません。これはconda 3.5.2の時点です。
AnneTheAgile 14年

9
これは削除されましたか?実行すると、たとえば、conda install autopep8「パッケージが見つかりません」というメッセージが表示され、anaconda.orgを手動で検索する必要があります。
内部石2015

@AnneTheAgile running pip...も機能しません。condaパッケージはまったく検索されません。
Wang

16

私は@Viktor Kerkezの答えに従いましたが、さまざまな成功を収めてきました。私は時々このレシピが

conda skeleton pypiパッケージ

condaビルドパッケージ

すべてが機能したように見えますが、パッケージを正常にインポートできませんでした。最近、Anacondaユーザーグループでこれについて質問し、@ Travis Oliphant氏から、Conacを使用してAnacondaに同梱されていないパッケージをビルドおよび管理するための最良の方法について聞いた。このスレッドをここで読むことができますが、OPの質問への回答をより完全にするために、以下のアプローチについて説明します...

例:conda 2.2.5を使用して、優れたprettyplotlibパッケージをWindows にインストールします。

1a) conda build --build-recipe prettyplotlib

ビルドの最後のTESTセクションまで、ビルドメッセージはすべて適切に表示されます。私はこのエラーを見ました

ファイル "C:\ Anaconda \ conda-bld \ test-tmp_dir \ run_test.py"、23行インポートNone SyntaxError:Noneに割り当てられないTESTS FAILED:prettyplotlib-0.1.3-py27_0

1b) / conda-recipes / prettyplotlibに移動し、meta.yamlファイルを編集します。現在、ステップ1aのようにセットアップされているパッケージは、testセクションにエラーがあるyamlファイルになります。たとえば、これは私のものを探した方法ですprettyplotlib

test:   # Python imports   imports:
    - 
    - prettyplotlib
    - prettyplotlib

このセクションを編集して、-が前に付いている空白行を削除し、冗長なprettyplotlib行も削除します。この記事の執筆時点で、condaを使用してインストールしている外部パッケージの場合、このようなほとんどのmeta.yamlファイルを編集する必要があることがわかりました。つまり、空白のインポート行があり、指定されたパッケージの冗長インポートとともにエラーが発生しています。

1c) 1aからコマンドを再実行します。今回はエラーなしで完了します。ビルドの最後に、ビルドをbinstarにアップロードするかどうかを尋ねられます。私は「いいえ」と入力してから、次のメッセージを見ました。

このパッケージを後でbinstar.orgにアップロードする場合は、次のように入力します。

$ binstarアップロードC:\ Anaconda \ conda-bld \ win-64 \ prettyplotlib-0.1.3-py27_0.tar.bz2

このtar.bz2ファイルは、実際にインストールする必要があるビルドです。

2) conda install C:\Anaconda\conda-bld\win-64\prettyplotlib-0.1.3-py27_0.tar.bz2

これらの手順に従って、Anacondaに付属していない多数のパッケージをcondaを使用して正常にインストールしました。以前は、pipを使用してこれらの一部をインストールしていたのでpip uninstall PACKAGE、condaでPACKAGEをインストールする前にインストールしました。condaを使用すると、conda、pip、easy_install、およびpython setup.py installを使用して複数のパッケージをインストールするのではなく、単一のアプローチで(ほぼ)すべてのパッケージを管理できます。

コンテキストについては、@ Travis Oliphantによるこの最近のブログ投稿は、堅牢なPythonパッケージに組み込まれているすべてのものを評価するのではなく、確かに「うまくいく」ときに感謝する私のような人々に役立つと思います。condaは前向きな方法のようです...


2
condaバージョン3.5.2を使用して、コマンド$ conda build --build-recipe XXX; 「認識されない引数:--build-recipe」でエラーが発生します。完全な応答です。使用法:conda-build [-h] [-c] [--no-binstar-upload] [--output] [-s] [-t] [--no-test] [-V] [-q] RECIPE_PATH [RECIPE_PATH ...] conda-build:エラー:認識されない引数:
build


3

私がここで欠けているのは、あなたがそうするとき、

>pip install .

setup.pyでローカルパッケージをインストールするには、同じバージョンのpython を使用するすべてのconda env から見えるパッケージをインストールします。注意:pipのcondaバージョンを使用しています!

たとえば、python2.7を使用している場合は、ローカルパッケージがここに配置されます。

/usr/local/anaconda/lib/python2.7/site-packages

後でpython = 2.7(=デフォルト)で新しいconda envを作成した場合:

>conda create --name new

>source activate new

そして次に:

(new)>conda list    // empty - conda is not aware of any packages yet

ただし、私が行う場合:

(new)>pip list      // the local package installed above is present

したがって、この場合、condaはpipパッケージを認識しませんが、パッケージはpythonで使用できます。

しかし、私が代わりに(再びピップを使用して)ローカルパッケージをインストールした場合は後に、私が作成した(活性化)した新しいcondaのENV、 condaはそれを見ています:

(new)>conda list   // sees that the package is there and was installed by pip

したがって、condaとpipの相互作用にはいくつかの問題があると思います。つまり、pipを使用して1つのconda env内からローカルパッケージをインストールすると、そのパッケージが同じpythonバージョンの他のすべてのconda envで利用可能になります(ただし、condaリストでは表示されません)。



2

通常、「pip」コマンドの前に、パッケージをインストールする特定の環境の「bin / pip」フォルダーの前にプレフィックスを付けます。たとえば、pymc3を環境py34にインストールする場合は、次のコマンドを使用する必要があります。

~/anaconda/envs/py34/bin/pip install git+https://github.com/pymc-devs/pymc3 

基本的には、環境の 'bin / pip'フォルダーへの正しいパスを見つけて、インストールコマンドの前に置くだけです。


1

which pipは次のパスを示しています:

$ which pip
/home/kmario23/anaconda3/bin/pip

そのため、パッケージを使用しpip install <package-name>てインストールするパッケージは、リストを使用してエクスポートするときに、パッケージのリストに反映する必要があります。

$ conda list --export > conda_list.txt

しかし、私はしません。そのため、代わりに、他のいくつかの人が提案した次のコマンドを使用しました。

# get environment name by
$ conda-env list

# get list of all installed packages by (conda, pip, etc.,)
$ conda-env export -n <my-environment-name> > all_packages.yml
# if you haven't created any specific env, then just use 'root'

これで、all-packages.ymlファイル内のすべてのパッケージを確認できます。


1

以下のコマンドをconda環境にインストールすることから始めます。

conda install pip

その後、環境に必要なすべてのpipパッケージをインストールします。

すべてのcondaおよびpipパッケージをインストールして環境をエクスポートしたら、次を使用します。

conda env export -n <env-name> > environment.yml

これにより、フォルダーに必要なファイルが作成されます

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.