一段时间后,我终于设法成功安装了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
文件,但不知道如何解决。
答案 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;
}