Почему conda init неправильно обновляет мой .bash_profile? - PullRequest
0 голосов
/ 28 марта 2020

После выполнения этих шагов и установки conda кажется, что conda init по какой-то причине некорректно обновляет мой .bash_profile. Он добавляет свой контент ПОСЛЕ запуска .bashrc и, таким образом, когда bash запускается, все мои вещи в conda по какой-то причине не запускаются правильно. В итоге мне пришлось вручную изменить .bash_profile, чтобы он выглядел следующим образом:

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

if [ -f ~/.bashrc ]; then
   source ~/.bashrc
fi

При установке я использовал то, что я считал официальной установкой :

sh Anaconda3-2020.02-MacOSX-x86_64.sh

но это, кажется, вызывает проблемы (например, conda init bash не добавляет вещи в нужном месте в .bash_profile. Графический установщик / dmg даже устанавливает вещи в ~/opt по некоторым причинам). Я обрисовал в общих чертах хакерское решение, которое работало для меня здесь , но я предполагаю, что это неправильный способ делать вещи.

Что вызывает у меня проблемы и как их исправить?

1 Ответ

1 голос
/ 28 марта 2020

Как говорит комментарий chepner, я обнаружил, что в конечном итоге conda init не работает из коробки по какой-то причине (например, если он изменяет .bash_profile, очевидно, что пользователь будет запускать свои .bashrc файл где-то там, поэтому он должен добавить его содержимое правильно до этого, или, по крайней мере, в imho). В любом случае, это пример рабочего файла:

(automl) brandBrandoParetoopareto~/automl-meta-learning $ cat ~/.bash_profile 
echo ----Running .bash_profile

conda -V
python -V
echo $PATH
echo $PATH | tr ":" "\n"

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

echo ----Completed running .bash_profile

if [ -f ~/.bashrc ]; then
   source ~/.bashrc
fi

после того, как я вручную изменил его.

Я бы не догадался, что мне нужно было самому изменить эти вещи. Возможно, мне не следует доверять командам / установщикам и т. Д. c и видеть, что вывод на их терминал происходит чаще.


Кроме того, дела обстоят хуже, если вы используете встроенный терминал в vscode, как я. Для этого прочтите это, чтобы избежать ошибок / странного поведения: https://code.visualstudio.com/updates/v1_36#_launch -конец-с-чистыми средами

Запуск терминалов с чистыми средами Интегрированный терминал в коде VS всегда действовал немного иначе, чем обычные терминалы, особенно на Linux и macOS. Причина в том, что среда всегда наследовалась из окна (экземпляра) VS Code и переменные среды, связанные с VS Code / Electron, были удалены, тогда как обычный терминал обычно запускался из меню Dock / Start и использовал системную среду. Это может вызвать проблемы в некоторых сценариях ios, например, Python виртуальные среды были повреждены из-за того, как они используют переменную $ PATH.

Существует новая опция предварительного просмотра, Terminal.integrated.inheritEnv, которая при Значение false приводит к тому, что терминал не использует среду VS Code.

Вместо этого, в зависимости от платформы, он будет выполнять следующее:

Linux: выборка и использование среды родительского процесса Кодекс "основной процесс". macOS: извлеките несколько важных переменных среды из текущей среды и включите их только. В конце концов мы хотели бы, чтобы macOS вел себя так же, как Linux, но в настоящее время существуют проблемы с извлечением окружения. Windows: В настоящее время этот параметр не влияет на Windows. Основным видимым результатом установки значения false для атрибута attribute_nv является то, что $ SHLVL (уровень оболочки) теперь должен быть равен 1, а $ PATH не должен включать дубликаты путей, если ваши сценарии запуска не содержат их преднамеренно.

Значение по умолчанию для Terminal.integrated.inheritEnv имеет значение true, что является предыдущим поведением, но в будущем мы, вероятно, переключим значение на false.

также закрытие и открытие vscode полностью, по-видимому, полезно .

Надеюсь, это сэкономит людям время на изменение файлов bash вокруг, а также на переустановку и удаление множества вещей.

Еще один полезный совет - go вверху слева от vscode, где написано code, щелкните его, затем go, чтобы перейти к настройкам и настройкам. Затем вы можете изменить terminal.integrated.inheritEnv на false, отменив выбор / выбрав его.

...