#python #plugins #environment-variables #sublimetext3 #pipenv
#python #Плагины #переменные среды #sublimetext3 #pipenv
Вопрос:
Я установил yapf
и PyYapf
пакет (https://github.com/jason-kane/PyYapf ) для форматирования кода sublime text для Python. Кроме того, для моих проектов на Python я использую pipenv
.
При выполнении команды форматирования в sublime я получаю следующую ошибку
Traceback (most recent call last):
File "~/.pyenv/versions/3.6.8/bin/pipenv", line 10, in <module>
sys.exit(cli())
File "~/.pyenv/versions/3.6.8/lib/python3.6/site-packages/pipenv/vendor/click/core.py", line 764, in __call__
return self.main(*args, **kwargs)
File "~/.pyenv/versions/3.6.8/lib/python3.6/site-packages/pipenv/vendor/click/core.py", line 696, in main
_verify_python3_env()
File "~/.pyenv/versions/3.6.8/lib/python3.6/site-packages/pipenv/vendor/click/_unicodefun.py", line 124, in _verify_python3_env
' mitigation steps.' extra
RuntimeError: Click will abort further execution because Python 3 was configured to use ASCII as encoding for the environment. Consult https://click.palletsprojects.com/en/7.x/python3/ for mitigation steps.
This system supports the C.UTF-8 locale which is recommended.
You might be able to resolve your issue by exporting the
following environment variables:
export LC_ALL=C.UTF-8
export LANG=C.UTF-8
Теперь я попробовал предложение использовать два вышеупомянутых экспорта и установить их глобально в своем профиле (и перезагрузить компьютер).
Открываем терминал и проверяем, что они, кажется, доступны:
$printenv | grep "C.UTF-8"
LC_ALL=C.UTF-8
LANG=C.UTF-8
Однако sublime text по-прежнему выдает исходную ошибку. Глядя на исходный код пакета, среда считывается следующим образом внутри PyYapf.py
пакета:
self.popen_env = os.environ.copy()
При печати содержимого self.popen_env
тогда LANG
и LC_ALL
, похоже, не установлены или не имеют C.UTF-8
значения.
Откуда sublime text получает envs?
Комментарии:
1. Вы используете Linux или macOS?
2. Я на Linux MInt 19
3. Насколько мне известно,
os.environ()
следует напрямую предоставлять вам среду запущенного процесса. Я бы предложил перезапустить, чтобы убедиться, что dock / launcher наследует новую среду, но вы уже это сделали. Вы получаете разные результаты, если запускаете Sublime с терминала (после проверки переменных, как указано выше)?4. Я всегда запускаю sublime с терминала, так что это должно давать ему те же переменные, которые я получаю с
printenv
в терминале, или нет?5. Я бы предположил, что это так. В прошлом у меня были похожие проблемы с этими самыми переменными, и установка их в терминале и запуск оттуда работали, а значок запуска — нет.
Ответ №1:
Быстрое решение:
$ cd ~/.config/sublime-text-3/Packages
$ mkdir -p Default
$ echo 'import os; os.environ["LC_ALL"] = os.environ["LANG"] = "C.UTF-8"' > Default/echo.py
Ну, ради бога, НЕ пытайтесь использовать этот неприятный взлом. Пожалуйста, потратьте некоторое время на правильную настройку ваших локалей, иначе вы, вероятно, столкнетесь с новыми проблемами с локализацией в будущем.
Для Linux Mint и других вариантов Debian просто запустите $ sudo dpkg-reconfigure locales
и отметьте en_US.UTF-8
(или любой другой язык, который вы предпочитаете) в списке. Следуйте этим двум постам для получения более подробной информации об ошибках локали.