ฉันจะป้องกัน Conda ไม่ให้เปิดใช้งานสภาพแวดล้อมพื้นฐานโดยค่าเริ่มต้นได้อย่างไร


234

ฉันเพิ่งติดตั้ง anaconda2 บน Mac ของฉัน โดยค่าเริ่มต้น Conda ถูกกำหนดค่าให้เปิดใช้งานสภาพแวดล้อมพื้นฐานเมื่อฉันเปิดเซสชันเทอร์มินัลใหม่

ฉันต้องการเข้าถึงคำสั่ง Conda (เช่นฉันต้องการพา ธ ไปยัง Conda ที่เพิ่มใน $ PATH ของฉันซึ่ง Conda ทำเมื่อเริ่มต้นใช้งานได้ดี)

แต่ฉันไม่ได้ตั้งโปรแกรมตามปกติในหลามและฉันไม่ต้องการให้ Conda เปิดใช้งานสภาพแวดล้อมตามค่าเริ่มต้น

เมื่อดำเนินการครั้งแรกconda initจากพรอมต์ Conda จะเพิ่มสิ่งต่อไปนี้ในของฉัน.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 <<<

หากฉันใส่ความคิดเห็นกับบล็อกทั้งหมดฉันจะไม่สามารถเปิดใช้งานสภาพแวดล้อม Conda ใด ๆ ได้

ฉันพยายามที่จะคอมเม้นต์บล็อกทั้งหมดยกเว้น

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

แต่เมื่อฉันเริ่มเซสชันใหม่และพยายามเปิดใช้งานสภาพแวดล้อมฉันได้รับข้อความแสดงข้อผิดพลาดนี้:

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

คำถามนี้ (และคนอื่น ๆ ชอบ) มีประโยชน์ แต่ท้ายที่สุดไม่ตอบคำถามของฉันและเหมาะสำหรับผู้ใช้ linux

เพื่อความกระจ่างแจ้งฉันไม่ได้ขอให้ลบออก(base)จาก$PS1ฉันขอให้ Conda ไม่เปิดใช้งานฐานเมื่อฉันเปิดเซสชันเทอร์มินัล


คุณเคยลองใช้source activateแทนไหม หรือที่รู้จักว่า "oldschool วิธี"
Jena

คำตอบ:


481

ฉันมี conda 4.6 พร้อมบล็อกของรหัสที่คล้ายกันซึ่งถูกเพิ่มโดย conda ในกรณีของฉันมีการตั้งค่าคอนเดนเซอร์เพื่อปิดใช้งานการเปิดใช้งานฐานอัตโนมัติ:

conda config --set auto_activate_base false

ครั้งแรกที่คุณเรียกใช้มันจะสร้าง./condarcไดเรกทอรีในบ้านของคุณด้วยการตั้งค่านั้นเพื่อแทนที่ค่าเริ่มต้น

สิ่งนี้จะไม่ทำให้คุณยุ่งเหยิง.bash_profileแต่มันเป็นโซลูชันที่สะอาดกว่าหากไม่มีการแก้ไขด้วยตนเองในส่วนที่ conda จัดการ


1
ยิ่งใหญ่ คุณจะหาข้อมูลเกี่ยวกับการตั้งค่าได้จากที่ไหน? เพราะฉันจำไม่ได้ว่าอ่านที่ใดก็ได้ในบทแนะนำเบื้องต้นหรือ
DryLabRebel

6
มัน @DryLabRebel ไม่ได้กล่าวถึงในบันทึกประจำรุ่นใด ๆ conda config --describeแต่คุณสามารถค้นหาได้อธิบายไว้ในตัวเลือกการกำหนดค่าโดยใช้ ค้นหา codebase สำหรับ "auto_activate_base" ปรากฏขึ้นเพื่อแสดง Conda v4.6.0 เป็นการแนะนำ
merv

2
โอ๊ะพลาดคำถามของคุณ ขออภัย! @merv ถูกต้องว่าอยู่ในการกำหนดค่า ฉันกำลังดูตัวเลือกต่าง ๆ สำหรับปัญหาที่แตกต่างกันและเห็นตัวเลือกนั้น
jieong

5
@DryLabRebel หลังจากที่ตัวติดตั้งเริ่มต้น Anaconda มันพิมพ์ออกมา: หากคุณต้องการให้สภาพแวดล้อมพื้นฐานของ conda ไม่ถูกเปิดใช้งานเมื่อเริ่มต้นให้ตั้งค่าพารามิเตอร์ auto_activate_base เป็น false: conda config --set auto_activate_base falseขอบคุณสำหรับการติดตั้ง Anaconda3!
Zhi Yuan

5
ขอบคุณมากสำหรับคำตอบนี้ IMO สิ่งนี้ควรเป็นพฤติกรรมเริ่มต้น สำหรับผู้ที่มี Linux ที่อาจสงสัยว่าพวกเขาควรทำตามคำถาม Linux ที่เชื่อมโยงเพียงทำตามนี้ดูเหมือนว่าจะทำงานโดยไม่คำนึงถึงระบบปฏิบัติการ (Linux Mint ที่นี่)
Kamel

22

คำตอบนั้นขึ้นอยู่กับเวอร์ชั่นcondaที่คุณติดตั้งเล็กน้อย สำหรับเวอร์ชันของ conda> = 4.4 ควรจะเพียงพอกับdeactivateสภาพแวดล้อม conda หลังจากการเริ่มต้นดังนั้นให้เพิ่ม

conda deactivate

ข้างใต้

# <<< conda initialize <<<

5
ที่ควรจะใช้ได้และควรพูดคุยกัน แต่ฉันต้องการโซลูชันที่แจ้งโปรไฟล์ทุบตีของฉันมากกว่าที่จะเพิ่มเข้าไป
DryLabRebel

การที่คุณสามารถแยกแยะได้ขึ้นอยู่กับว่าคุณมีเวอร์ชันของคอน ถ้าฉันเข้าใจถูกต้องเมื่อคุณมี conda 4.6 คุณจะต้องใช้__conda_setupฟังก์ชั่นเท่านั้นดังนั้นคุณจะได้ทั้งหมด 6 บรรทัด แต่ฉันไม่คิดว่าจะมีการ
Decutter

2
แต่ถ้าคุณแก้ไขส่วนนั้นด้วยตนเอง conda จะไม่สามารถจัดการได้โดยอัตโนมัติ ฉันขอแนะนำให้ทิ้งไว้คนเดียว
darthbith

2
สิ่งนี้ไม่ทำงานการเปิดเชลล์ใหม่ด้วยรหัส conda ที่ต่อท้ายด้วย. zshrc i ถูกพุชเข้าไปใน envronment (ฐาน) ทุกครั้ง
เมอร์ลิน

1
อย่างที่เมอร์ลินพูดการเริ่มต้นสถานีใหม่จะนำไปสู่การมี (ฐาน) อีกครั้ง
jreft56

18

ดังนั้นในที่สุดฉันก็พบว่าถ้าฉันแสดงความคิดเห็นบล็อกการเริ่มต้น Conda เช่นนั้น:

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

มันทำงานตรงตามที่ฉันต้องการ นั่นคือ Conda พร้อมใช้งานเพื่อเปิดใช้งานสภาพแวดล้อมหากฉันต้องการ แต่ไม่ได้เปิดใช้งานตามค่าเริ่มต้น


5
น่าเสียดายที่หากเนื้อหาของบล็อกได้รับการจัดการโดยสคริปต์อื่นตามที่ระบุไว้ในตอนเริ่มต้นของการบล็อกรหัสการเปลี่ยนแปลงนี้อาจถูกแทนที่หรือย้อนกลับโดยสคริปต์อื่น
Kukanani

@DryLabRebel - คุณเคยพบวิธีที่มีประสิทธิภาพที่เอาความยุ่งเหยิงออกจากrcไฟล์หรือไม่? ฉันจะสนใจในการนี้ด้วยความสามารถในการรักษาเพียง CONDA เช่น Envs อื่น ๆ มากกว่ามันเกะกะสิ่งขึ้น
baxx

@baxx ไม่ฉันยังไม่ได้ หากคุณต้องการเวอร์ชั่นล่าสุดของ conda และคุณต้องการให้มันทำงานได้คุณต้องมีคำสั่ง initialisation จริงๆ
DryLabRebel

ok ไชโยฉันรู้สึกว่าอาจมีวิธีการถ้าคุณเพิ่งติดตั้ง conda env ใน dir โครงการไม่ได้อยู่ในตำแหน่งส่วนกลาง ยังไม่แน่ใจด้วย
baxx

ดูเหมือนว่าจะมีข้อเสียเพียงเล็กน้อยเมื่อเทียบกับการใช้conda config --set auto_activate_base falseงานคุณสามารถอธิบายรายละเอียดเพิ่มเติมได้หรือไม่
AMC

16

มี 3 วิธีในการบรรลุผลหลังจากconda4.6 (วิธีสุดท้ายมีลำดับความสำคัญสูงสุด)

  1. ใช้คำสั่งย่อยconda configเพื่อเปลี่ยนการตั้งค่า

    conda config --set auto_activate_base false
  2. ในความเป็นจริงในอดีตคำสั่งย่อยที่มีการเปลี่ยนแปลงการตั้งค่าไฟล์conda config .condarcเราสามารถปรับเปลี่ยน.condarcได้โดยตรง เพิ่มเนื้อหาต่อไปนี้ลงใน.condarcไดเรกทอรีหลักของคุณ

    # auto_activate_base (bool)
    #   Automatically activate the base environment during shell
    #   initialization. for `conda init`
    auto_activate_base: false
  3. ตั้งค่าตัวแปรสภาพแวดล้อมCONDA_AUTO_ACTIVATE_BASEในไฟล์ init ของเชลล์ ( .bashrcสำหรับ bash .zshrcสำหรับ zsh)

    CONDA_AUTO_ACTIVATE_BASE=false

    การแปลงจากcondarcชื่อพารามิเตอร์การตั้งค่าไฟล์ที่ใช้ในการชื่อพารามิเตอร์ตัวแปรสภาพแวดล้อมที่ทำให้ชื่อทั้งหมดเป็นตัวพิมพ์ใหญ่และย่อหน้า CONDA_ตัวอย่างเช่นalways_yesพารามิเตอร์การกำหนดค่าconda สามารถระบุได้โดยใช้CONDA_ALWAYS_YESตัวแปรสภาพแวดล้อม

    การตั้งค่าสภาพแวดล้อมมีความสำคัญมากกว่าการตั้งค่าที่เกี่ยวข้องใน.condarcไฟล์

อ้างอิง


คำตอบที่ดี ผมใช้วิธี env var ภายในสคริปต์เพื่อควบคุมพฤติกรรมนี้ชอบโดย:export CONDA_AUTO_ACTIVATE_BASE=false; eval "$(conda shell.bash hook)"
เควิน Olree

ฉันต้องเพิ่มexport CONDA_AUTO_ACTIVATE_BASE=false. zshrc ของฉันเพื่อให้ตัวเลือก 3 ทำงาน
normanius

9

หากต้องการปิดใช้งานการเปิดใช้งานสภาพแวดล้อมฐานโดยอัตโนมัติในเทอร์มินัล:

conda config --set auto_activate_base false

วิธีเปิดใช้งานสภาพแวดล้อมฐาน conda:

conda activate

3
เฮ้คำตอบนี้ถูกต้อง แต่ก็เกือบจะเหมือนกับคำตอบที่ยอมรับ คำถามของฉันไม่เกี่ยวข้องกับการเปิดใช้งานคอนโดนี่เป็นหนึ่งในสิ่งแรกที่คุณเรียนรู้เมื่อทำแบบฝึกหัด พิจารณาการเพิ่มข้อมูลที่เป็นประโยชน์และมีความเกี่ยวข้องซึ่งยังไม่ได้ระบุไว้ในคำตอบก่อนหน้า
DryLabRebel

2
ฉันกำลังค้นหาวิธีการเปิดใช้งานด้วยตนเองหลังจากปิดใช้งานอัตโนมัติ ขอบคุณ!
eigil

สิ่งนี้ช่วยได้ ฉันยังค้นหาวิธีเปิดใช้งาน conda ด้วยตนเองหลังจากปิดใช้งานการเปิดใช้งานอัตโนมัติ
Chris Njuguna

1

สิ่งหนึ่งที่ไม่ได้ชี้ให้เห็นคือมีความแตกต่างเล็กน้อยระหว่างการไม่มีสภาพแวดล้อมที่ใช้งานอยู่และการเปิดใช้งานสภาพแวดล้อมพื้นฐานหากคุณต้องการเรียกใช้แอปพลิเคชันจากไดเรกทอรีสคริปต์ของ Conda (Python) (ตามที่ @DryLabRebel ต้องการ )

คุณสามารถติดตั้งและถอนการติดตั้งผ่าน conda และ conda แสดงสภาพแวดล้อมพื้นฐานว่าแอ็คทีฟ - ซึ่งสำคัญคือ:

> 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

หากคุณต้องการทำให้ bashrc ของคุณง่ายคุณสามารถลบconda initความยุ่งเหยิงที่สร้างขึ้นทั้งหมดและเก็บเพียงบรรทัดเดียว:

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

ดูการเปลี่ยนแปลงที่แนะนำเพื่อเปิดใช้งาน conda ในเชลล์ของคุณในเปลือกของคุณ

สิ่งนี้จะทำให้คำสั่ง conda พร้อมใช้งานโดยไม่ต้องเปิดใช้งานสภาพแวดล้อมพื้นฐาน

หากคุณต้องการใช้ bashrc ของคุณในระบบอื่น ๆ ที่ไม่ได้ติดตั้ง conda ในพา ธ เดียวกันคุณสามารถเก็บif/ fiบรรทัดไว้เพื่อหลีกเลี่ยงข้อความแสดงข้อผิดพลาดเช่น:

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

หากคุณต้องการเก็บ bashrc ของคุณอย่างง่ายคุณสามารถลบ conda init ทั้งหมดที่สร้างความยุ่งเหยิงและเก็บเพียงบรรทัดเดียว "ถ่วง" ซึ่งระบุว่า!! เนื้อหาภายในบล็อกนี้ได้รับการจัดการโดย 'conda init' !! ? อะไรคือข้อดีของการทำเช่นนี้แทนที่จะเพียงแค่เปลี่ยนตัวเลือกการตั้งค่า / การตั้งค่า Conda ที่เหมาะสม
AMC

-2

นี่อาจเป็นข้อผิดพลาดของอนาคอนด้า อะไรที่เหมาะกับฉัน:

ขั้นที่ 1: vim /anaconda/bin/activateมันแสดงให้เห็น:

 #!/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 "$@"

ขั้นที่ 2: ใส่ความคิดเห็นในบรรทัดสุดท้าย: # conda activate "$@"


-2

ฉันประสบปัญหาเดียวกัน เริ่มแรกฉันลบ. bash_profile แต่นี่ไม่ใช่วิธีที่ถูกต้อง หลังจากติดตั้งแอนาคอนดาจะแสดงคำแนะนำอย่างชัดเจนสำหรับปัญหานี้ โปรดตรวจสอบภาพเพื่อหาวิธีการแก้ปัญหาที่จัดทำโดย Anaconda

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.