Я хочу навсегда добавить путь к $PYTHONPATH. Согласно этому ответу SO, добавив
export PYTHONPATH = "${PYTHONPATH}:/my/other/path"
в файл .bashrc
должен выполнить это на Mac или дистрибутиве GNU/Linux. Однако в моей системе $PYTHONPATH
пусто, поэтому после экспорта, если я echo $PYTHONPATH
, он возвращает :/my/other/path
-
который не является допустимым путем из-за префикса :
. Один из способов обойти это - сделать
export PYTHONPATH = "/my/other/path"
но это забьет другие пути, если они существуют на разных машинах. Как я могу справиться с обоими случаями?
Это также рассматривается в некоторых ответах: unix.stackexchange.com/questions/26047/…
Пожалуйста, отмечайте вопросы в соответствии с проблемой, которую вы пытаетесь решить, а не в соответствии с тем, почему вы хотите ее решить. У эксперта по Python нет особых преимуществ в объяснении того, как устанавливать переменные среды в конкретной оболочке; эксперт в этой оболочке делает.
Спасибо, кто-то добавил bash, а я добавил zsh, так как он работает и для zsh.
Тест if -z
сообщит вам, является ли переменная пустой/неустановленной. Если это так, не используйте двоеточие, в противном случае используйте его.
if [ -z ${PYTHONPATH} ];
then
export PYTHONPATH = "/my/other/path"
else
export PYTHONPATH = "${PYTHONPATH}:/my/other/path"
fi
Вы можете поместить это в свой .bashrc
:
[ -z "${PYTHONPATH-}" ] && export PYTHONPATH = "/my/other/path" || export PYTHONPATH = "${PYTHONPATH}:/my/other/path"
что совпадает с предыдущим ответом.
PYTHONPATH=$PYTHONPATH:/my/other/path
PYTHONPATH=${PYTHONPATH#:}
Это удалит начальное двоеточие, полученное из изначально пустого PYTHONPATH
В zsh
вы можете использовать typeset -T
для создания «связанных» переменных, которые идеально подходят для управления путями. Эти переменные можно настроить так, чтобы они добавляли только двоеточия по мере необходимости, добавляли к пути только уникальные элементы и экспортировали результат.
typeset -xUT PYTHONPATH pythonpath
pythonpath+=/usr/local/lib
print $PYTHONPATH
# ==> /usr/local/lib
pythonpath+=/usr/lib
pythonpath+=/usr/local/lib # duplicate not added
print $PYTHONPATH
# ==> /usr/local/lib:/usr/lib
Подробнее здесь.
Какую оболочку вы используете?