Bagaimana cara melacak paket yang diinstal pip di lingkungan Anaconda (Conda)?

141

Saya telah menginstal dan telah menggunakan distribusi Anaconda Python, dan saya sudah mulai menggunakan lingkungan Anaconda (Conda). Saya dapat menggunakan conda install...perintah standar untuk meletakkan paket dari distribusi ke lingkungan saya, tetapi untuk menggunakan apa pun di luar (yaitu Flask-WTF, flask-sqlalchemy, dan alembic) saya perlu menggunakan pip installdi lingkungan aktif. Namun, ketika saya melihat konten lingkungan, baik di direktori, atau menggunakan paket ed conda listini pip installtidak muncul.

Menggunakan pip freezedan pip listhanya mencantumkan setiap paket yang pernah saya instal.

Apakah ada cara untuk melacak apa yang ada di setiap Anaconda saya env(baik pipdan condaterpasang)?

gromiczek.dll
sumber
7
Gunakan yang pipdiinstal dengan conda, misalnya ~/anaconda/bin/pip. Gunakan untuk menginstal paket ke condalingkungan, serta untuk melihat penyatuan paket yang diinstal dengan this pipdan with conda install.
Sergey Orshanskiy
7
conda listuntuk sementara sekarang sudah termasuk paket python yang diinstal dengan cara lain (misalnya pip, instalasi mudah, langsung dengan python setup.py install, dll dll)
kalefranz
1
Jangan tingkatkan pip Anda atau ekspor ini akan terhenti
Andrew Cassidy

Jawaban:

120

conda-env sekarang melakukan ini secara otomatis (jika pip diinstal dengan conda).

Anda dapat melihat cara kerjanya dengan menggunakan alat ekspor yang digunakan untuk memigrasi lingkungan:

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

File tersebut akan mencantumkan paket conda dan paket pip:

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

Jika Anda ingin menindaklanjuti dengan mengekspor lingkungan, pindah environment.ymlke mesin host baru dan jalankan:

conda env create -f path/to/environment.yml
conner.xyz
sumber
Hanya untuk memperjelas hal ini bagi pembaca selanjutnya: -pip:bagian ini menandai semua paket yang diinstal melalui pip. Juga, sepengetahuan saya, conda env export tidak akan pernah menghasilkan nilai pencocokan semvar , seperti yang -nodejs=0.10.*ditunjukkan dalam contoh ini. Ini akan memberikan nilai eksplisit seperti -nodejs=0.10.1dan Anda harus meletakkan *jika itu yang Anda inginkan. Jika itu bisa menangani pencocokan semvar, itu akan luar biasa dan saya akan senang mendengar bagaimana membuat keajaiban itu terjadi. :)
Mike Williamson
64

condahanya akan melacak paket yang diinstal. Dan pipakan memberi Anda paket-paket yang diinstal menggunakan pippenginstal itu sendiri atau yang mereka gunakan setuptoolsdalam setup.pypembuatan konda mereka menghasilkan informasi telur. Jadi pada dasarnya Anda memiliki tiga opsi.

  1. Anda dapat mengambil persatuan conda listdan pip freezedan mengelola paket yang diinstal dengan menggunakan conda(menunjukkan bahwa dalam conda list) dengan condamanajer paket dan orang-orang yang diinstal dengan pip(menunjukkan bahwa di pip freezetetapi tidak dalam conda list) dengan pip.

  2. Instal di lingkungan Anda hanya python, pipdan distributepaketkan dan kelola semuanya dengan pip. (Ini tidak sepele jika Anda menggunakan Windows ...)

  3. Buat condapaket Anda sendiri , dan kelola semuanya dengan conda.

Saya pribadi akan merekomendasikan opsi ketiga karena sangat mudah untuk membangun condapaket. Ada gudang git contoh resep di akun github kontinum. Tapi biasanya intinya adalah:

 conda skeleton pypi PACKAGE
 conda build PACKAGE

atau hanya:

conda pipbuild PACKAGE

Juga ketika Anda telah membuatnya sekali, Anda dapat mengunggahnya ke https://binstar.org/ dan langsung menginstalnya dari sana.

Maka Anda akan memiliki semua yang dikelola menggunakan conda.

Viktor Kerkez
sumber
3
Saya hanya mencoba ~/anaconda/bin/pip install memory-profilerdan conda install numba, dan keduanya ditampilkan ~/anaconda/bin/pip freeze.
Sergey Orshanskiy
2
"git repositori resep contoh di akun github kontinum" Apakah maksud Anda github.com/ContinuumIO/anaconda-recipes ? Silakan tautkan jika Anda bisa
endolith
Ini sebenarnya tidak menginstal paket sehingga Anda dapat mengimpornya. Anda harus melakukan conda install C:\...PACKAGE-0.0.0-py27_0.tar.bz2seperti yang dijelaskan di stackoverflow.com/a/20750388/125507
endolith
Saya akan mengatakan pertama-tama selalu ada conda install python=3.x.ydi lingkungan conda Anda sehingga pemasangan pip berikutnya melalui pip yang terpasang secara konda.
Ustaman Sangat
24

Ada cabang conda (new-pypi-install) yang menambahkan integrasi yang lebih baik dengan pip dan PyPI. Dalam daftar conda tertentu juga akan menunjukkan paket yang diinstal pip dan conda install pertama-tama akan mencoba menemukan paket conda dan gagal yang akan menggunakan pip untuk menginstal paket.

Cabang ini dijadwalkan untuk digabungkan akhir minggu ini sehingga versi 2.1 dari conda akan memiliki integrasi pip yang lebih baik dengan conda.

Travis Oliphant
sumber
2
Saya ingin menunjukkan bahwa ini sudah bekerja di conda 2.2.3 (dan mungkin sebelum itu). Cara kerjanya adalah jika Anda mencoba conda install packagedan tidak dapat menemukan resep conda, ia mencoba menginstalnya melalui pip(dan kemudian melacaknya). Ia bahkan menyarankan untuk menginstal pipjika tidak di lingkungan Anda. Terima kasih Travis untuk semua pekerjaan Anda!
jorgeca
5
Klarifikasi, karena saya telah salah membaca ini beberapa kali. @Travis berarti saya berpikir bahwa jika ada yang berjalan di dalam conda, maka menjalankan pip akan mencari paket conda terlebih dahulu? Kebalikannya jelas tidak benar - conda install tidak mencari paket pypi, bahkan item di pypi.binstar.org. Ini sesuai dengan conda 3.5.2.
AnneTheAgile
9
Apakah ini telah dihapus? Jika saya menjalankan, katakanlah, conda install autopep8ia memberi tahu saya "Tidak ada paket yang ditemukan" dan bahwa saya harus mencari anaconda.org secara manual.
endolith
@AnneTheAgile running pip...juga tidak berfungsi, tidak akan mencari paket conda sama sekali.
Wang
16

Saya mengikuti jawaban @Viktor Kerkez dan meraih kesuksesan yang beragam. Saya menemukan bahwa terkadang resep ini

PAKET pypi kerangka conda

Conda build PAKET

akan terlihat seperti semuanya bekerja tetapi saya tidak berhasil mengimpor PAKET. Baru-baru ini saya bertanya tentang hal ini di grup pengguna Anaconda dan mendengar dari @Travis Oliphant sendiri tentang cara terbaik menggunakan conda untuk membangun dan mengelola paket yang tidak disertakan dengan Anaconda. Thread ini bisa anda baca disini , namun saya akan menjelaskan pendekatannya dibawah ini semoga dapat membuat jawaban atas pertanyaan OP lebih lengkap ...

Contoh: Saya akan menginstal paket prettyplotlib yang sangat baik di Windows menggunakan conda 2.2.5.

1a) conda build --build-recipe prettyplotlib

Anda akan melihat pesan build semuanya terlihat bagus hingga bagian TEST terakhir dari build tersebut. Saya melihat kesalahan ini

File "C: \ Anaconda \ conda-bld \ test-tmp_dir \ run_test.py", baris 23 impor Tidak ada SyntaxError: tidak dapat menetapkan ke Tidak Ada UJI GAGAL: prettyplotlib-0.1.3-py27_0

1b) Masuk ke / conda-recipes / prettyplotlib dan edit file meta.yaml. Saat ini, paket-paket yang diatur seperti pada langkah 1a menghasilkan file yaml yang memiliki kesalahan di testbagian tersebut. Misalnya, inilah cara saya mencariprettyplotlib

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

Edit bagian ini untuk menghapus baris kosong yang didahului oleh - dan juga hapus baris prettyplotlib yang berlebihan. Pada saat penulisan ini saya telah menemukan bahwa saya perlu mengedit sebagian besar file meta.yaml seperti ini untuk paket eksternal yang saya instal dengan conda, artinya ada baris impor kosong yang menyebabkan kesalahan bersama dengan impor yang berlebihan dari paket yang diberikan .

1c) Jalankan kembali perintah dari 1a, yang seharusnya selesai tanpa kesalahan kali ini. Di akhir build, Anda akan ditanya apakah ingin mengupload build ke binstar . Saya memasukkan Tidak dan kemudian melihat pesan ini:

Jika Anda ingin mengunggah paket ini ke binstar.org nanti, ketik:

$ binstar unggah C: \ Anaconda \ conda-bld \ win-64 \ prettyplotlib-0.1.3-py27_0.tar.bz2

File tar.bz2 itu adalah build yang sekarang harus Anda instal.

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

Mengikuti langkah-langkah ini saya telah berhasil menggunakan conda untuk menginstal sejumlah paket yang tidak disertakan dengan Anaconda. Sebelumnya saya telah menginstal beberapa ini menggunakan pip, jadi saya lakukan pip uninstall PACKAGEsebelum menginstal PACKAGE dengan conda. Dengan menggunakan conda, saya sekarang dapat mengelola (hampir) semua paket saya dengan satu pendekatan daripada memiliki campuran yang diinstal dengan conda, pip, easy_install, dan python setup.py install.

Untuk konteksnya, saya pikir posting blog baru-baru ini oleh @Travis Oliphant akan bermanfaat bagi orang-orang seperti saya yang tidak menghargai segala sesuatu yang masuk ke dalam kemasan Python yang kuat tetapi tentu saja menghargai ketika sesuatu "berfungsi". Conda sepertinya cara yang bagus untuk maju ...

Josh Hemann
sumber
2
Menggunakan conda versi 3.5.2, perintah $ conda build --build-recipes XXX; Terjadi kesalahan dengan 'argumen tidak dikenal: --build-resep'. Tanggapan penuh adalah; penggunaan: conda-build [-h] [-c] [--no-binstar-upload] [--output] [-s] [-t] [--no-test] [-V] [-q] RECIPE_PATH [RECIPE_PATH ...] conda-build: error: argumen tidak dikenal: --build-resep
AnneTheAgile
10

Inilah mengapa saya menulis Picky: http://picky.readthedocs.io/

Ini adalah paket python yang melacak paket yang diinstal dengan pip atau conda di virtualenvs dan conda envs.

Chris Withers
sumber
3

Saya pikir apa yang hilang di sini adalah ketika Anda melakukannya:

>pip install .

untuk menginstal paket lokal dengan setup.py, itu menginstal paket yang terlihat oleh semua conda env yang menggunakan versi python yang sama. Catatan Saya menggunakan pip versi conda!

misalnya, jika saya menggunakan python2.7, paket lokal akan diletakkan di sini:

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

Jika saya kemudian membuat conda env baru dengan python = 2.7 (= default):

>conda create --name new

>source activate new

Lalu lakukan:

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

Namun, jika saya melakukannya:

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

Jadi dalam kasus ini, conda tidak mengetahui tentang paket pip, tetapi paket tersebut tersedia untuk python.

Namun, jika saya malah menginstal paket lokal (sekali lagi menggunakan pip) setelah saya membuat (dan mengaktifkan) conda env baru, sekarang conda melihatnya:

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

Jadi saya pikir interaksi antara conda dan pip memiliki beberapa masalah - yaitu, menggunakan pip untuk menginstal paket lokal dari dalam satu conda env membuat paket itu tersedia (tetapi tidak terlihat melalui daftar conda) ke semua conda env lain dari versi python yang sama.

MH
sumber
2

Saya biasanya mengawali folder 'bin / pip' untuk lingkungan tertentu yang Anda inginkan untuk menginstal paket sebelum perintah 'pip'. Misalnya, jika Anda ingin menginstal pymc3 di lingkungan py34, Anda harus menggunakan perintah ini:

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

Anda pada dasarnya hanya perlu menemukan jalur yang benar ke folder 'bin / pip' lingkungan Anda dan meletakkannya sebelum perintah instal.

Gianluca
sumber
1

Saya which pipmenunjukkan jalur berikut:

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

Jadi, paket apa pun yang saya instal menggunakan pip install <package-name>harus tercermin dalam daftar paket ketika daftar diekspor menggunakan:

$ conda list --export > conda_list.txt

Tapi saya tidak. Jadi, sebagai gantinya saya menggunakan perintah berikut seperti yang disarankan oleh beberapa orang lain:

# 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'

Sekarang, saya dapat melihat semua paket di all-packages.ymlfile saya .

kmario23
sumber
1

Anda dapat mulai dengan menginstal perintah yang diberikan di bawah ini di lingkungan conda:

conda install pip

Diikuti dengan menginstal semua paket pip yang Anda butuhkan di lingkungan.

Setelah menginstal semua paket conda dan pip untuk mengekspor penggunaan lingkungan:

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

Ini akan membuat file yang diperlukan di dalam folder

Kavish
sumber