为Python项目编写makefiles

2021-04-02 04:38:32

我是makefiles的一个忠实的粉丝。几乎所有我的侧面项目都是如此,我也在工作中倡导他们的使用。

Makefiles为您的贡献者提供有关如何执行某些事情的入口点,建立,测试,部署。如果正确完成,它们可以大量地提取您的CI / CD管道脚本,因为它们通常可以愚蠢地呼叫疑妥。最重要的是,它们是一个非常普通的开发人员也是一个开发人员。

对于Python项目,其中我几乎总是使用虚拟环境,i' ve一直在使用两种不同的makefiles策略:

让' s看起来非常简单的makefile,允许建设,测试和发布Python项目:

全部:棉绒试验。检查:测试测试:Pytest。pytest。leint lint:flake8 .phony:发布发布:python3 setup.py sdist bdist_wheel上载清洁:查找。 -type f-name * .pyc -delete查找。 -type d -name __pycache__ -delete

假设已经有一个Venv安装了,您必须首先激活它,然后修整make命令:

当然,缺点当然,你必须为每个纽卡来激活venv。当您将TMUX Orput Vim中的新终端生成要运行make时,它会在TMUX Orput vim中生成新终端时有点烦人。

激活内部的Venv将无法正常工作,因为每个配方在其自己的屏蔽中运行,而且每个配方中的每个命令也在其自己的shell中运行。后者对后者的反向方法,即使用.oneshell标志,但不知道每个食谱中的新壳牌的问题。

第二种方法减轻了激活Venv Altogether.i&#39的问题。我借用了这个想法大多是从makefile.venv并简化了我的需求。

#系统python解释器。仅用于创建虚拟环境py = python3 venv = venv bin = $(venv)/ bin#使它在windows上工作太多($(os),windows_nt)bin = $(venv)/ scripts py = python endif全部:棉绒测试$(VENV):要求。 TXT要求 - 开发。 txt设置。 PY $(py)-m venv $(venv)$(bin)/ pip安装 - apgrade -r要求.txt $(bin)/ pip安装 - aupgrade -r要求-dev.txt $(bin)/ pip安装-e。触摸$(venv).phony:测试测试:$(venv)$(bin)/ pytest .phony:lint lint:$(venv)$(bin)/ flake8 .phony:发布发布:$(venv)$(bin )/ python setup.py sdist bdist_wheel上载清洁:RM -RF $(VENV)查找。 -type f-name * .pyc -delete查找。 -type d -name __pycache__ -delete

假设venvev的Plake8和Python在SystemDirectly上安装了所有依赖关系,而不是调用PyTest,而不是调用PyTest,而不是调用Pytest,而是通过向Venv' s bin目录的路径进行前缀,从Venv中显式调用Venv。为了确保Venv存在,食谱的每一个都取决于$(VENV)目标,这确保了我们总安装了最新的VENV。

这是有效的,因为。 Venv / Bin / Activate-Script基本上只是撰写了这个词:它将VENV放在路径中的任何其他东西之前,因此每个都会找到一个在VENV中安装的vent。

和Don' t'直接与Venvs交易(嗯,对于那些简单的案例至少......)。如果你不需要支持Windows,你可以删除TheAppr块,Makefile看起来相对驯服,即使对于Peoplethat Don' T使用经常。

我认为第二种方法更方便。我已经使用了第一个接近的几年,并且只有最近就学会了第二个接近。 Ihaven' t真的注意到了任何缺点,但我确实意识到几乎allpython项目与makefiles i' ve检查出来,似乎更喜欢Therightach。我不知道这是为什么?