How to use virtualenv in makefile

python venv
python makefile
makefile python executable
python makefile alternative
makefile pylint
makefile pipenv
makefile tutorial
makefile phony

I want to perform several operations while working on a specified virtualenv.

For example command

make install

would be equivalent to

source path/to/virtualenv/bin/activate
pip install -r requirements.txt

Is it possible?

In make you can run a shell as command. In this shell you can do everything you can do in a shell you started from comandline. Example:

    ( \
       source path/to/virtualenv/bin/activate; \
       pip install -r requirements.txt; \

Attention must be paid to the ;and the \.

Everything between the open and close brace will be done in a single instance of a shell.

sio/Makefile.venv: Seamlessly manage Python virtual , Makefile.venv takes care of creating, updating and invoking Python virtual environment that you can use in your Makefiles. It will allow you to reduce venv related� It is always recommended to use a virtual environment while developing Python applications. To create a virtual environment, go to your project’s directory and run venv. If you are using Python 2, replace venv with virtualenv in the below commands. On macOS and Linux:

I like using something that runs only when requirements.txt changes:

venv: venv/bin/activate

venv/bin/activate: requirements.txt
    test -d venv || virtualenv venv
    . venv/bin/activate; pip install -Ur requirements.txt
    touch venv/bin/activate

test: venv
    . venv/bin/activate; nosetests project/test

    rm -rf venv
    find -iname "*.pyc" -delete

Makefile with Python � Michal Hořejšek blog, Makefile will run venv target only when you remove (or don't have yet) virtual environment or you change . Because I use venv as a� python.make. The python.make file is a Makefile module for python development that use GNU make to build a local python development environment using virtualenv, and simplify pip package management from outside.

I have had luck with this.

    source ./path/to/bin/activate; \
    pip install -r requirements.txt; \

Virtualenv and Makefiles, Makefile venv: venv/bin/activate venv/bin/activate: requirements.txt test You can use the venv target as a dependency for other targets or call� Virtualenv and Makefiles. # Makefile venv: You can use the venv target as a dependency for other targets or call make venv to build or update the virtual

Normally make runs every command in a recipe in a different subshell. However, setting .ONESHELL: will run all the commands in a recipe in the same subshell, allowing you to activate a virtualenv and then run commands inside it.

Note that .ONESHELL: applies to the whole Makefile, not just a single recipe. It may change behaviour of existing commands, details of possible errors in the full documentation. This will not let you activate a virtualenv for use outside the Makefile, since the commands are still run inside a subshell.

Reference documentation:



.PHONY: install
    source path/to/virtualenv/bin/activate
    pip install -r requirements.txt

Take five minutes to simplify your life with Make, For this reason, the makefile code will not work when copied directly from the post. I use GNU Make to automate my data processing pipelines. a virtualenv in the base directory (see VENV) make python-reqs install python� Makefile will run venv target only when you remove (or don’t have yet) virtual environment or you change Because I use venv as a dependency for all tasks, I can change my Python dependencies and just run the tests. Makefile will ensure that a virtual environment is updated.

This is an alternate way to run things that you want to run in virtualenv.


    $(BIN)pip install -r requirements.txt


PS: This doesn't activate the virtualenv, but gets thing done. Hope you find it clean and useful.

Use Python with virtualenv in Makefiles, In some of my projects I use multiple Python and Shell scripts to automate the tasks and use a Makefile to glue the pieces together. I also use� In the attempt to create and use a standard Makefile for my python projects, this is the fruit of my labor. It includes support for virtual environments, requirements, syntax checking, running tests, coverage and uploading packages to PyPI.

How to activate a virtualenv using a makefile?, At the top of my makefile I have this line: SHELL := /bin/sh. which is needed for most of the commands. However, I would like to also have a make command to� If you would like to be able to use a single tool and switch between Python versions, virtualenv will allow you to do just that. virtualenv has a parameter-p that allows you to select which version of Python to use. Combine that with the which command, and we can easily select your preferred version of Python to use in a simple manner. For

Setup Build Environment - Glean, Rust can be installed using rustup , with the following commands: Glean's Makefile will handle the creation and use of a virtual environment automatically� virtualenv. In your Command Prompt enter: pip install virtualenv. Launch virtualenv. In your Command Prompt navigate to your project: cd your_project. Within your project: virtualenv env. Activate your virtualenv: on Windows, virtualenv creates a batch file \env\Scripts\activate.bat. to activate virtualenv on Windows, activate script is in the

How to Create a Minimal Makefile for Python Projects, activate virtual environment; install dependencies listed in the requirments.txt file; install the project (for development or testing); run tests; clean� So, to run your recipe make invokes a shell and passes it your virtualenv command, it works, then the shell exits, and your virtualenv is gone. In short, there's no easy way to do this in a makefile. The simplest thing to do is create a script that first sources the virtualenv then runs make, and run that instead of running make.

  • There's no need for the () in this case. make already spawns a new shell instance for each line in a rule body. You just need to use the continuation markers to have make read the lines and execute them in a single shell instead of in multiple shells as it would by default.
  • @Yukulélé: Please don't change my answer to somewhat which is also posted here as a solution. user2693845 posted exactly what you edited my answer to. The comment from Etan already explains that the braces are not needed...
  • I was getting "source: command not found" so I ended up having to use the synonym. Ex changing 3 above: `. path/to/virtualenv/bin/activate; ` I hope this helps anyone else that stumbles here :-)
  • This looks slick. Can anyone explain it in greater detail?
  • What additional information are you looking for? I can add to the answer.
  • @oneself what should be run to activate what
  • /bin/sh: 1: source: not found
  • @Adil Add for example this to the first row of the makefile: SHELL := /bin/bash. Adjust to whichever shell you use.
  • on my opinion it's best solution