Làm cách nào để ngăn Conda kích hoạt môi trường cơ sở theo mặc định?


234

Gần đây tôi đã cài đặt anaconda2 trên máy Mac của mình. Theo mặc định, Conda được cấu hình để kích hoạt môi trường cơ sở khi tôi mở phiên cuối mới.

Tôi muốn truy cập vào các lệnh Conda (tức là tôi muốn đường dẫn đến Conda được thêm vào $ PATH của tôi mà Conda thực hiện khi được khởi tạo để điều đó ổn).

Nhưng tôi thường không lập trình bằng python và tôi không muốn Conda kích hoạt môi trường theo mặc định.

Khi lần đầu tiên thực hiện conda inittừ dấu nhắc, Conda thêm phần sau vào .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 <<<

Nếu tôi nhận xét toàn bộ khối, thì tôi không thể kích hoạt bất kỳ môi trường Conda nào.

Tôi đã cố gắng để nhận xét toàn bộ khối ngoại trừ

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

Nhưng sau đó khi tôi bắt đầu một phiên mới và cố gắng kích hoạt một môi trường, tôi nhận được thông báo lỗi này:

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

Câu hỏi này (và những câu hỏi khác giống như vậy) rất hữu ích, nhưng cuối cùng không trả lời câu hỏi của tôi và phù hợp hơn với người dùng linux.

Để làm rõ, tôi không yêu cầu xóa (base)khỏi tôi $PS1Tôi yêu cầu Conda không kích hoạt cơ sở khi tôi mở phiên cuối.


Bạn đã thử sử dụng source activatethay thế? hay còn gọi là "phương pháp oldschool"
jena

Câu trả lời:


481

Tôi có conda 4.6 với một khối mã tương tự được thêm bởi conda. Trong trường hợp của tôi, có một cài đặt cấu hình conda để tắt kích hoạt cơ sở tự động:

conda config --set auto_activate_base false

Lần đầu tiên bạn chạy nó, nó sẽ tạo một ./condarcthư mục chính của bạn với cài đặt đó để ghi đè mặc định.

Điều này sẽ không làm phiền bạn .bash_profilenhưng đó là một giải pháp sạch hơn mà không cần chỉnh sửa thủ công mà phần conda quản lý.


1
Tuyệt quá. Bạn tìm hiểu về thiết lập ở đâu? Bởi vì tôi không nhớ đã đọc nó ở bất cứ đâu trong các hướng dẫn giới thiệu?
DryLabRebel 7/2/19

6
@DryLabRebel Nó không được đề cập trong bất kỳ Ghi chú phát hành nào, nhưng bạn có thể tìm thấy nó được mô tả trong các tùy chọn cấu hình bằng cách chạy conda config --describe. Tìm kiếm cơ sở mã cho "auto_activate_base" xuất hiện để hiển thị Conda v4.6.0 là phần giới thiệu.
19 lúc 19:30

2
Rất tiếc, bỏ lỡ câu hỏi của bạn. Lấy làm tiếc! @merv đúng ở chỗ nó nằm trong cấu hình. Tôi đã xem xét các lựa chọn khác nhau cho một vấn đề khác nhau và thấy tùy chọn đó.
jieong

5
@DryLabRebel Sau khi trình cài đặt khởi tạo Anaconda, nó sẽ in ra: Nếu bạn muốn môi trường cơ sở của conda không được kích hoạt khi khởi động, hãy đặt tham số auto_activate_base thành false: conda config --set auto_activate_base falseCảm ơn bạn đã cài đặt Anaconda3!
Tử Nguyên

5
Cảm ơn rất nhiều cho câu trả lời này. IMO đây phải là hành vi mặc định. Đối với những người có Linux, những người có thể tự hỏi liệu họ có nên theo câu hỏi Linux được liên kết hay không, chỉ cần làm theo nó dường như hoạt động bất kể HĐH (Linux Mint ở đây)
Kamel

22

Câu trả lời phụ thuộc một chút vào phiên bản condamà bạn đã cài đặt. Đối với các phiên bản của conda> = 4.4, nó phải đủ cho deactivatemôi trường conda sau khi khởi tạo, vì vậy hãy thêm

conda deactivate

ngay bên dưới

# <<< conda initialize <<<

5
Điều đó nên làm việc, và nên khái quát. Nhưng tôi thích một giải pháp khai báo hồ sơ bash của tôi hơn là thêm vào nó.
DryLabRebel

Việc bạn có thể giải mã hay không phụ thuộc vào phiên bản conda bạn có. Nếu tôi hiểu chính xác, một khi bạn có conda 4.6, bạn chỉ cần __conda_setupchức năng, vì vậy bạn có thể đưa toàn bộ xuống còn 6 dòng. Nhưng tôi không nghĩ có nhiều thứ để giải mã ở đây ...
darthbith

2
Nhưng nếu bạn tự chỉnh sửa phần đó, thì conda không còn có thể tự động quản lý nó nữa. Tôi sẽ đề nghị chỉ để nó một mình.
darthbith

2
Điều này không hoạt động, mở một lớp vỏ mới với mã conda được thêm vào .zshrc tôi bị đẩy vào môi trường (cơ sở) mỗi lần.
Merlin

1
chính xác như Merlin đã nói, bắt đầu thiết bị đầu cuối mới dẫn đến việc có (cơ sở) một lần nữa
jreft56

18

Vì vậy, cuối cùng tôi thấy rằng nếu tôi nhận xét khối khởi tạo Conda như vậy:

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

Nó hoạt động chính xác như tôi muốn. Đó là, Conda có sẵn để kích hoạt một môi trường nếu tôi muốn, nhưng không kích hoạt theo mặc định.


5
Thật không may, nếu nội dung khối được quản lý bởi các tập lệnh khác, như đã nêu ở phần đầu của khối mã, thay đổi này có thể được thay thế hoặc khôi phục bởi các tập lệnh khác.
Kukanani

@DryLabRebel - bạn đã bao giờ tìm thấy một cách tiếp cận mạnh mẽ để loại bỏ sự lộn xộn khỏi rctập tin chưa? Tôi cũng sẽ quan tâm đến điều này, có thể chỉ đối xử với conda như các env khác, thay vì làm mọi thứ lộn xộn lên
baxx

@baxx không tôi không có. Nếu bạn muốn phiên bản mới nhất của conda và bạn muốn nó hoạt động, thì bạn thực sự cần các lệnh khởi tạo.
DryLabRebel

ok chúc mừng, tôi cảm thấy có thể có một cách xung quanh nếu bạn chỉ cài đặt conda env trong thư mục dự án, không phải ở một vị trí tập trung. Chưa chắc lắm
baxx

Điều này có vẻ như nó chỉ có nhược điểm so với việc sử dụng conda config --set auto_activate_base false, bạn có thể giải thích?
AMC

16

Có 3 cách để đạt được điều này sau conda4.6. (Phương pháp cuối cùng có mức ưu tiên cao nhất.)

  1. Sử dụng lệnh phụ conda configđể thay đổi cài đặt.

    conda config --set auto_activate_base false
  2. Trong thực tế, conda configlệnh phụ cũ đang thay đổi tập tin cấu hình .condarc. Chúng tôi có thể sửa đổi .condarctrực tiếp. Thêm nội dung sau vào .condarctrong thư mục nhà của bạn,

    # auto_activate_base (bool)
    #   Automatically activate the base environment during shell
    #   initialization. for `conda init`
    auto_activate_base: false
  3. Đặt biến môi trường CONDA_AUTO_ACTIVATE_BASEtrong tệp init của shell. ( .bashrcđối với bash, .zshrcđối với zsh)

    CONDA_AUTO_ACTIVATE_BASE=false

    Để chuyển đổi từ condarctên tham số cấu hình dựa trên tệp sang tên tham số biến môi trường, hãy đặt tên tất cả chữ hoaký tự trước CONDA_ . Ví dụ: always_yestham số cấu hình của conda có thể được chỉ định bằng CONDA_ALWAYS_YESbiến môi trường.

    Các cài đặt môi trường được ưu tiên hơn các cài đặt tương ứng trong .condarctệp.

Người giới thiệu


câu trả lời chính xác. tôi sử dụng phương thức var env trong các script để kiểm soát hành vi này như sau:export CONDA_AUTO_ACTIVATE_BASE=false; eval "$(conda shell.bash hook)"
Kevin Olree

Tôi đã phải thêm export CONDA_AUTO_ACTIVATE_BASE=falsevào .zshrc của mình để tùy chọn 3 hoạt động.
Normanius

9

Để vô hiệu hóa tự động kích hoạt môi trường cơ sở conda trong thiết bị đầu cuối:

conda config --set auto_activate_base false

Để kích hoạt môi trường cơ sở conda:

conda activate

3
Này, câu trả lời này là đúng, nhưng hầu như giống hệt với câu trả lời được chấp nhận. Câu hỏi của tôi không liên quan đến việc kích hoạt chung cư, đây là một trong những điều đầu tiên bạn học được khi xem qua các hướng dẫn. Xem xét thêm một số thông tin hữu ích, có liên quan chưa được cung cấp trong các câu trả lời trước.
DryLabRebel

2
Tôi đang tìm cách kích hoạt thủ công sau khi tắt auto. Cảm ơn!
eigil

Điều này đã giúp. Tôi cũng đang tìm cách kích hoạt conda bằng tay sau khi tắt chức năng tự động kích hoạt.
Chris Njuguna

1

Một điều chưa được chỉ ra, đó là có rất ít sự khác biệt giữa việc không có môi trường hoạt động và kích hoạt môi trường cơ sở, nếu bạn chỉ muốn chạy các ứng dụng từ thư mục script của Conda (như @DryLabRebel muốn ).

Bạn có thể cài đặt và gỡ cài đặt qua conda và conda hiển thị môi trường cơ sở là hoạt động - mà về cơ bản là:

> 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

Nếu bạn muốn giữ bashrc của mình đơn giản, bạn có thể xóa tất cả các conda initmớ hỗn độn đã tạo và chỉ giữ một dòng duy nhất:

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

Xem Thay đổi được đề xuất để bật conda trong vỏ của bạn .

Điều này sẽ làm cho lệnh conda có sẵn mà không kích hoạt môi trường cơ sở.

Nếu bạn muốn sử dụng bashrc của mình trên các hệ thống khác, nơi conda không được cài đặt trong cùng một đường dẫn, bạn cũng có thể giữ if/ fidòng để tránh thông báo lỗi, tức là:

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

Nếu bạn muốn giữ bashrc của mình đơn giản, bạn có thể xóa tất cả các cụm từ conda init được tạo và chỉ giữ một dòng "Clutter" có nội dung !! Nội dung trong khối này được quản lý bởi 'conda init' !! ? Lợi thế của việc này là gì thay vì chỉ thay đổi tùy chọn cài đặt / cấu hình Conda thích hợp?
AMC

-2

Đây có thể là một lỗi của Anaconda gần đây. Những gì làm việc cho tôi:

bước 1 : vim /anaconda/bin/activate, nó hiển thị:

 #!/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: nhận xét dòng cuối cùng: # conda activate "$@"


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.