Я работаю над обработкой commit-msg git. Работает все, кроме импорта определенных c модулей. Плохое поведение связано с использованием c панели vs-кода GUI git (маленькая галочка в верхней части панели управления исходным кодом) с установленными модулями pip. Если я использую git commit -m "some message"
через терминал, все работает отлично. Но когда я использую vs-код GUI, я получаю сообщение об ошибке импорта.
Думая, что это может быть проблема со средой, я обеспечил глобальную доступность необходимого модуля, pip install
вставив нужный модуль на мою машину вне виртуальной среды. Это не помогло.
Чтобы увидеть, что происходит, я протер свой крючок и заменил его не более чем help("modules")
, чтобы проверить, действительно ли там были мои модули. Они не были. Итак, я запустил
import os
dir_path = os.path.dirname(os.path.abspath(__file__))
print(dir_path)
Это напечатало мой путь к запускаемому файлу и был ожидаемым путем. Я открыл новый терминал вне vs-кода без включенной виртуальной среды и запустил python3 path/to/file
, чтобы увидеть, появится ли там мой модуль. Так и было.
Кроме того, он есть, если я также запустил его в терминале vs-code. Единственное место, где он, кажется, отсутствует, - это то место, где vs-code git GUI извлекает свой список пакетов.
Где vs-code git получает его python список пакетов и как можно Я гарантирую, что либо; 1) он указывает на мой обычный список пакетов python или 2) я могу добавить необходимые модули в его путь?
Спасибо
EDIT: Благодаря интеллектуальному Предложение Джона Закмейстера оставлено в комментариях, я настроил свой хук на вызов env. Затем я инициировал ловушку через терминал и через GUI для сравнения.
Использование GUI добавляет несколько переменных, в основном для целей ведения журнала и обработки ошибок. Но есть пара, которую я не совсем понимаю, чем они занимаются. APPLICATION_INSIGHTS_NO_DIAGNOSTIC_CHANNEL=true
и ELECTRON_RUN_AS_NODE=1
Однако, поскольку он работает в терминале, а не GUI, я должен предположить, что добавленные переменные не являются виновником. Итак, вместо этого я смотрю на то, что отличается от одного от другого. За исключением дополнительных переменных c, специфичных для VS-кода, на самом деле не так уж много изменений.
Уровень оболочки - от 2 до терминала, но только от 1 до GUI (интересно .. .) В терминале есть дополнительные переменные TERM=xterm-256color
и TERM_PROGRAM_VERSION=1.46.0
, которых нет в GUI env. Кроме того, в терминале заданы некоторые цвета, но не GUI.
Наконец, есть одна переменная, которая в обоих случаях отличается. GUI дает _=/usr/share/code/code
, а терминал дает _=/usr/bin/git
. Я предполагаю, что это относится к тому, какая программа инициировала терминал, но я не смог это проверить.
Вот и все. PATH
одинаково для обоих, как и SHELL
, как и почти все переменные GIT_anything
(за исключением того факта, что GUI устанавливает пейджер, которого нет на терминале)