Makefile в Windows 10 - файл не найден - PullRequest
0 голосов
/ 24 апреля 2019

Через некоторое время мне наконец удалось успешно установить python и pip и запустить его на моем компьютере с использованием кода Visual Studio.

Я работаю в виртуальной среде на python, и у нас есть Makefile со следующим утверждением:

test:
    source .env && PYTHONPATH=. PY_ENV=testing py.test ${ARGS} --duration=20

Файл .env находится в главном каталоге рядом с Makefile.Он содержит некоторые переменные среды, необходимые для тестирования определенных API.

Когда я вынимаю строку из файла и запускаю ее в своем терминале, все работает нормально, все тесты выполняются и т. Д.

Однакоесли я вызываю следующее: make test Я получаю эту ошибку:

$ make test
source .env && PYTHONPATH=. PY_ENV=testing py.test  --duration=20
/usr/bin/sh: line 0: source: .env: file not found
make: *** [test] Error 1
(venv)

Мне кажется, что при запуске этой команды из Makefile он не может видеть файл .env, но имеетпонятия не имею, как это решить.

1 Ответ

0 голосов
/ 24 апреля 2019

Команда source не ищет файл в текущем рабочем каталоге. Как упомянуто в man source:

Чтение и выполнение команд из имени файла в текущей оболочке. окружение и возвращает статус выхода последней выполненной команды из имени файла. Если имя файла не содержит косую черту, имена файлов в PATH используются для поиска каталога, содержащего имя файла.

Измените путь к файлу следующим образом:

test:
    source ./.env && PYTHONPATH=. PY_ENV=testing py.test ${ARGS} --duration=20

Обратите внимание, что эта ошибка не возникает в bash версии <4. Это происходит из-за ошибки реализации при запуске в режиме POSIX (что использует <code>make, поскольку его оболочкой по умолчанию является sh, которая обычно bash --posix ). Правильное поведение было впервые упомянуто в документации bash-2.05 (редакция 28ef6c31, файл doc / bashref.info):

Когда Bash не находится в режиме POSIX, текущий каталог ищется, если FILENAME не найден в `$ PATH '.

Эти старые версии искали текущий каталог независимо от режима POSIX. Это было исправлено только в bash-4.0-rc1 (редакция 3185942a, файл general.c). Запуск git diff 3185942a~ 3185942a general.c выводит этот раздел:

@@ -69,6 +69,7 @@ posix_initialize (on)
   if (on != 0)
     {
       interactive_comments = source_uses_path = expand_aliases = 1;
+      source_searches_cwd = 0;
     }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...