Windows 10上的Makefile-找不到文件

时间:2019-04-24 08:55:33

标签: python makefile

一段时间后,我终于设法成功安装了python和pip并使用Visual Studio Code在我的计算机上运行它。

我正在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 :(得分:0)

source命令不在当前工作目录中查找文件。如man source中所述:

  

从当前Shell中的文件名读取并执行命令   环境并返回最后执行的命令的退出状态   来自文件名。如果文件名不包含斜杠,则文件名位于   PATH用于查找包含文件名的目录。

像这样更改文件路径:

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

请注意,在bash版本<4中不会发生此错误。这是由于在POSIX模式下运行时发生的实现错误(make使用的是它的默认Shell为sh,这是因为通常为bash --posix)。正确的行为在bash-2.05的文档中首次提到(修订版28ef6c31,文件doc / bashref.info):

  

当Bash不在POSIX模式下时,如果   在“ $ PATH”中找不到FILENAME。

这些旧版本搜索当前目录,而不管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;
     }