【发布时间】:2021-09-22 14:51:37
【问题描述】:
我正在尝试在 Makefile 中创建一个模板以重用 Python virtualenv。 在 Makefile 我定义:
ENV_CREATE ?= $(shell python3 -m virtualenv venv)
并在目标中:
set_up:
$(ENV_CREATE) ; \
. venv/bin/activate
由于 Makefiule 目标执行,我得到了
/bin/sh: -c: line 0: syntax error near unexpected token `('
/bin/sh: -c: line 0: `echo created virtual environment CPython3.7.9.final.0-64 in 333ms creator CPython3Posix(dest=/Users/marian/Work/git/sigma/sphere/sphere-data-platform/venv, clear=False, no_vcs_ignore=False, global=False) seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/Users/marian/Library/Application Support/virtualenv) added seed packages: pip==21.1.2, setuptools==57.0.0, wheel==0.36.2 activators BashActivator,CShellActivator,FishActivator,PowerShellActivator,PythonActivator,XonshActivator ; . venv/bin/activate python3 -m pip install -r requirements.txt -r requirements-dev.txt ; '
make: *** [setup] Error 2
我做错了什么?
【问题讨论】:
-
您可以在设置
ENV_CREATE后立即使用$(info ENV_CREATE=[$(ENV_CREATE)])来检查它的值。它看起来正确吗? -
是的
ENV_CREATE=[created virtual environment CPython3.7.9.final.0-64 in 300ms creator CPython3Posix(dest=/Users/marian/Work/git/sigma/sphere/sphere-data-platform/venv, clear=False, no_vcs_ignore=False, global=False) seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/Users/marian/Library/Application Support/virtualenv) added seed packages: pip==21.1.2, setuptools==57.0.0, wheel==0.36.2 activators BashActivator,CShellActivator,FishActivator,PowerShellActivator,PythonActivator,XonshActivator] -
该文本不是有效的命令(或命令),可以传递给您正在尝试执行的 shell。
set_up规则的命令部分中的$(ENV_CREATE)语句的用途是什么? -
我正在尝试使用变量创建和激活 Python 虚拟环境,因此我可以在其他目标中重新使用它以避免代码重复,例如:
CREATE_ENV = $(shell python3 ...)。然后在其他目标中:$(CREATE_ENV) ; \ install_requirements
标签: python bash makefile virtualenv