Bagaimana cara mencegah Conda mengaktifkan lingkungan basis secara default?


235

Saya baru saja menginstal anaconda2 di Mac saya. Secara default Conda dikonfigurasi untuk mengaktifkan lingkungan basis ketika saya membuka sesi terminal baru.

Saya ingin akses ke perintah Conda (yaitu saya ingin path ke Conda ditambahkan ke $ PATH saya yang dilakukan Conda ketika diinisialisasi jadi tidak masalah).

Tapi saya biasanya tidak memprogram dalam python, dan saya tidak ingin Conda mengaktifkan lingkungan secara default.

Saat pertama kali mengeksekusi conda initdari prompt, Conda menambahkan yang berikut ini ke .bash_profile:

# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/Users/geoff/anaconda2/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
    eval "$__conda_setup"
else
if [ -f "/Users/geoff/anaconda2/etc/profile.d/conda.sh" ]; then
    . "/Users/geoff/anaconda2/etc/profile.d/conda.sh"
else
    export PATH="/Users/geoff/anaconda2/bin:$PATH"
fi
# fi
unset __conda_setup
# <<< conda initialize <<<

Jika saya mengomentari seluruh blok, maka saya tidak dapat mengaktifkan lingkungan Conda.

Saya mencoba mengomentari seluruh blok kecuali untuk

export PATH="/Users/geoff/anaconda2/bin:$PATH"

Tetapi kemudian ketika saya memulai sesi baru dan mencoba untuk mengaktifkan suatu lingkungan, saya mendapat pesan kesalahan ini:

CommandNotFoundError: Your shell has not been properly configured to use 'conda activate'.

Pertanyaan ini (dan yang lain menyukainya) sangat membantu, tetapi pada akhirnya tidak menjawab pertanyaan saya dan lebih cocok untuk pengguna linux.

Untuk klarifikasi, saya tidak meminta untuk menghapus (base)dari saya, $PS1saya meminta Conda untuk tidak mengaktifkan basis ketika saya membuka sesi terminal.


Sudahkah Anda mencoba menggunakannya source activate? alias "metode oldschool"
jena

Jawaban:


483

Saya memiliki conda 4.6 dengan blok kode serupa yang ditambahkan oleh conda. Dalam kasus saya, ada pengaturan konfigurasi conda untuk menonaktifkan aktivasi basis otomatis:

conda config --set auto_activate_base false

Pertama kali Anda menjalankannya, itu akan membuat ./condarcdirektori home Anda dengan pengaturan itu untuk menimpa default.

Ini tidak akan mengacaukan Anda .bash_profiletetapi ini adalah solusi yang lebih bersih tanpa mengedit manual bagian yang dapat dikelola.


1
Bagus. Dari mana Anda mengetahui tentang pengaturan? Karena saya tidak ingat membacanya di mana saja di tutorial pengantar?
DryLabRebel

6
@DryLabRebel Tidak disebutkan dalam Catatan Rilis apa pun, tetapi Anda dapat menemukannya dijelaskan dalam opsi konfigurasi dengan menjalankan conda config --describe. Mencari basis kode untuk "auto_activate_base" tampaknya menunjukkan Conda v4.6.0 adalah pengantar.
merv

2
Ups, ketinggalan pertanyaan Anda. Maaf! @erv benar dalam konfigurasi. Saya mencari opsi yang berbeda untuk masalah yang berbeda dan melihat opsi itu.
jieong

5
@DryLabRebel Setelah penginstal menginisialisasi Anaconda, ia mencetak: Jika Anda lebih suka lingkungan basis konda itu tidak diaktifkan saat startup, atur parameter auto_activate_base ke false: conda config --set auto_activate_base falseTerima kasih telah menginstal Anaconda3!
Zhi Yuan

5
Terima kasih banyak atas jawaban ini. IMO ini harus menjadi perilaku default. Bagi mereka dengan Linux yang mungkin bertanya-tanya apakah mereka harus mengikuti pertanyaan Linux yang ditautkan, cukup ikuti ini tampaknya berfungsi terlepas dari OS (Linux Mint di sini)
Kamel

22

Jawabannya sedikit tergantung pada versi condayang telah Anda instal. Untuk versi conda> = 4.4, itu harus cukup untuk deactivatelingkungan conda setelah inisialisasi, jadi tambahkan

conda deactivate

tepat di bawahnya

# <<< conda initialize <<<

5
Itu harus bekerja, dan harus menggeneralisasi. Tapi saya lebih suka solusi yang menyatakan profil bash saya, daripada menambahkannya.
DryLabRebel

Apakah Anda dapat declutter tergantung pada versi conda yang Anda miliki. Jika saya mengerti benar, setelah Anda memiliki conda 4.6, Anda hanya perlu __conda_setupfungsi, sehingga Anda bisa mendapatkan semuanya menjadi 6 baris. Tapi saya tidak berpikir ada banyak yang harus
diberitahukan di

2
Tetapi jika Anda mengedit bagian itu secara manual, maka konda tidak dapat lagi mengelolanya secara otomatis. Saya sarankan hanya membiarkannya saja.
darthbith

2
Ini tidak berhasil, membuka shell baru dengan kode konda yang ditambahkan di .zshrc saya terdorong ke lingkungan (base) setiap waktu.
Merlin

1
persis seperti yang dikatakan Merlin, memulai terminal baru mengarah untuk memiliki (pangkalan) lagi
jreft56

18

Jadi pada akhirnya saya menemukan bahwa jika saya berkomentar blok inisialisasi Conda seperti:

# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
# __conda_setup="$('/Users/geoff/anaconda2/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
# if [ $? -eq 0 ]; then
    # eval "$__conda_setup"
# else
if [ -f "/Users/geoff/anaconda2/etc/profile.d/conda.sh" ]; then
    . "/Users/geoff/anaconda2/etc/profile.d/conda.sh"
else
    export PATH="/Users/geoff/anaconda2/bin:$PATH"
fi
# fi
# unset __conda_setup
# <<< conda initialize <<<

Ini bekerja persis seperti yang saya inginkan. Yaitu, Conda tersedia untuk mengaktifkan lingkungan jika saya mau, tetapi tidak mengaktifkan secara default.


5
Sayangnya, jika konten blok dikelola oleh skrip lain, seperti yang dinyatakan pada awal blok kode, perubahan ini dapat diganti atau dibatalkan oleh skrip lain.
Kukanani

@DryLabRebel - apakah Anda pernah menemukan pendekatan yang kuat yang menghapus kekacauan dari rcfile? Saya akan tertarik pada hal ini juga, bisa memperlakukan konda seperti env lain, daripada mengacaukan segalanya
baxx

@ baxx tidak, saya belum. Jika Anda ingin versi terbaru dari conda, dan Anda ingin itu berfungsi, maka Anda benar-benar membutuhkan perintah inisialisasi.
DryLabRebel

ok sorak-sorai, saya merasa mungkin ada jalan keluar jika Anda hanya menginstal conda env di dir proyek, bukan di lokasi terpusat. Belum terlalu yakin
baxx

Sepertinya ini hanya memiliki kelemahan dibandingkan menggunakan conda config --set auto_activate_base false, bisakah Anda menguraikannya?
AMC

16

Ada 3 cara untuk mencapai ini setelah conda4,6. (Metode terakhir memiliki prioritas tertinggi.)

  1. Gunakan sub-perintah conda configuntuk mengubah pengaturan.

    conda config --set auto_activate_base false
  2. Bahkan, conda configsub-perintah sebelumnya adalah mengubah file konfigurasi .condarc. Kami dapat memodifikasi .condarcsecara langsung. Tambahkan konten berikut ke .condarcdalam direktori home Anda,

    # auto_activate_base (bool)
    #   Automatically activate the base environment during shell
    #   initialization. for `conda init`
    auto_activate_base: false
    
  3. Setel variabel lingkungan CONDA_AUTO_ACTIVATE_BASEdi file init shell. ( .bashrcuntuk bash, .zshrcuntuk zsh)

    CONDA_AUTO_ACTIVATE_BASE=false

    Untuk mengkonversi dari condarcnama parameter konfigurasi berbasis file ke nama parameter variabel lingkungan, buatlah nama semua huruf besar dan prepend CONDA_ . Misalnya, always_yesparameter konfigurasi conda dapat ditentukan menggunakan CONDA_ALWAYS_YESvariabel lingkungan.

    Pengaturan lingkungan didahulukan dari pengaturan terkait dalam .condarcfile.

Referensi


jawaban yang bagus saya menggunakan metode env var dalam skrip untuk mengontrol perilaku ini seperti:export CONDA_AUTO_ACTIVATE_BASE=false; eval "$(conda shell.bash hook)"
Kevin Olree

Saya harus menambahkan export CONDA_AUTO_ACTIVATE_BASE=false.zshrc agar opsi 3 berfungsi.
normanius

9

Untuk menonaktifkan aktivasi otomatis lingkungan base conda di terminal:

conda config --set auto_activate_base false

Untuk mengaktifkan lingkungan basis conda:

conda activate

3
Hai, Jawaban ini benar, tetapi sebenarnya identik dengan jawaban yang diterima. Pertanyaan saya tidak berkaitan dengan mengaktifkan kondominium, ini adalah salah satu hal pertama yang Anda pelajari saat mempelajari tutorial. Pertimbangkan untuk menambahkan beberapa informasi yang bermanfaat dan relevan yang belum disediakan dalam jawaban sebelumnya.
DryLabRebel

2
Saya mencari cara mengaktifkan secara manual setelah menonaktifkan otomatis. Terima kasih!
eigil

Ini membantu. Saya juga mencari cara mengaktifkan konda secara manual setelah menonaktifkan aktivasi otomatis.
Chris Njuguna

1

Satu hal yang belum ditunjukkan, adalah ada sedikit perbedaan antara tidak memiliki lingkungan aktif dan dan mengaktifkan lingkungan basis, jika Anda hanya ingin menjalankan aplikasi dari direktori skrip Conda (Python) (seperti yang diinginkan @DryLabRebel ).

Anda dapat menginstal dan menghapus instalan melalui conda dan conda menunjukkan lingkungan dasar sebagai aktif - yang intinya adalah:

> echo $Env:CONDA_DEFAULT_ENV
> conda env list
# conda environments:
#
base                  *  F:\scoop\apps\miniconda3\current

> conda activate
> echo $Env:CONDA_DEFAULT_ENV
base
> conda env list
# conda environments:
#
base                  *  F:\scoop\apps\miniconda3\current

0

Jika Anda ingin membuat bashrc Anda sederhana, Anda dapat menghapus semua conda initkekacauan yang dihasilkan, dan hanya menyimpan satu baris:

. "/Users/geoff/anaconda2/etc/profile.d/conda.sh"

Lihat Perubahan yang disarankan untuk mengaktifkan konda di shell Anda .

Ini akan membuat perintah conda tersedia tanpa mengaktifkan lingkungan basis.

Jika Anda ingin menggunakan bashrc Anda di sistem lain di mana conda tidak diinstal di jalur yang sama, Anda dapat menyimpan baris if/ fijuga untuk menghindari pesan kesalahan, yaitu:

if [ -f "/Users/geoff/anaconda2/etc/profile.d/conda.sh" ]; then
    . "/Users/geoff/anaconda2/etc/profile.d/conda.sh"
fi

Jika Anda ingin membuat bashrc Anda tetap sederhana, Anda dapat menghapus semua kekacauan yang dihasilkan condit init, dan hanya menyimpan satu baris The "clutter" yang mengatakan !! Isi dalam blok ini dikelola oleh 'conda init' !! ? Apa keuntungan dari melakukan ini daripada hanya mengubah opsi pengaturan / konfigurasi Conda yang sesuai?
AMC

-2

Ini mungkin bug dari anaconda baru-baru ini. Apa yang berhasil untuk saya:

step1:, vim /anaconda/bin/activateini menunjukkan:

 #!/bin/sh                                                                                
 _CONDA_ROOT="/anaconda"
 # Copyright (C) 2012 Anaconda, Inc
 # SPDX-License-Identifier: BSD-3-Clause
 \. "$_CONDA_ROOT/etc/profile.d/conda.sh" || return $?
 conda activate "$@"

step2: beri komentar pada baris terakhir: # conda activate "$@"


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.