A command line tool to create wrappers around executable files
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
.idea Update idea file Dec 23, 2018
ci_support Install miniconda on Travis Oct 15, 2017
.travis.yml Add Python 3.7 to Travis and AppVeyor (#24) Dec 23, 2018
CHANGELOG.rst Bump to 1.1.2 Dec 23, 2018
CONTRIBUTING.rst Fix project name on CONTRIBUTING file Oct 20, 2017
README.rst Add codecov.io badge Jan 27, 2018
requirements.txt Add flake8 plugin for pep8 naming Dec 22, 2018
setup.cfg Add setup.cfg and set version to 0.1.0 May 19, 2016
setup.py Bump to 1.1.2 Dec 23, 2018
tox.ini Add Python 3.7 to Travis and AppVeyor (#24) Dec 23, 2018



See Build Status on Travis CI See Build Status on AppVeyor

A command line tool to create wrappers around executable files


exec-wrappers is useful whenever you need a single executable file, but have to do some setup before executing it.

If you develop using some kind of environment isolation like conda, schroot, virtualenv you probably wanted to configure a GUI application like an IDE to use the executables available inside these environments.

But you normally have to create a script that do some setup/activation step and then run the command but creating such a script for each executable is tedious.

exec-wrappers helps automating that as it detects executable files and create a wrapper for each of them. It also already provides some wrappers for common tools.

Also, as the wrappers are intended to be used non-interactively, they are normally much simpler than the interactive counterpart.

For example, the conda wrappers are much faster than doing an activate and executing the command:

  • Regular activate:
$ echo 'source activate test 2> /dev/null; "$@"' > /tmp/activate-and-run && chmod a+x /tmp/activate-and-run
$ time /tmp/activate-and-run python --version
Python 2.7.11 :: Continuum Analytics, Inc.

real    0m0.354s
user    0m0.288s
sys 0m0.040s
  • Using python wrapper created by exec-wrappers:
$ time /tmp/conda_wrappers/python --version
Python 2.7.11 :: Continuum Analytics, Inc.

real    0m0.003s
user    0m0.000s
sys 0m0.000s

Having a low overhead is very important if you are executing the command non-interactively.


  • automatically detect executables in a given directory
  • wrappers written in plain shell and batch scripts
  • low overhead (as low as possible)
  • built-in wrappers for common tools


python is the only dependency to create wrappers. To properly use the generated wrappers you need the tool used by the wrapper (conda, schroot, etc.).


$ python setup.py install

How it works

Creating conda wrappers:

$ create-wrappers  -t conda --bin-dir ~/miniconda/envs/test/bin --dest-dir /tmp/conda_wrappers --conda-env-dir ~/miniconda/envs/test

This will create in /tmp/conda_wrappers a wrapper for each executable found in ~/miniconda/envs/test/bin. So if you run the python wrapper:

$ /tmp/conda_wrappers/python -c "import sys; print(sys.executable)"

It will actually activate the conda environment and set necessary variables, and then execute the real python interpreter. So you can use the wrapper to configure you IDE, for example.

Also a run-in script will be created, which you can use to run any arbitrary command:

$ /tmp/conda_wrappers/run-in bash -c 'echo $CONDA_DEFAULT_ENV'


  • conda:
$ create-wrappers  -t conda -b ~/miniconda/envs/test/bin -d /tmp/conda_wrappers --conda-env-dir ~/miniconda/envs/test
  • virtualenv:
$ create-wrappers  -t virtualenv -b ~/python3-env/bin -d /tmp/virtualenv_wrappers --virtual-env-dir ~/python3-env
  • schroot:
$ create-wrappers  -t schroot -b ~/chroots/centos5/bin -d /tmp/schroot_wrappers --schroot-name centos5
$ create-wrappers  -t schroot -b ~/chroots/centos5/bin -d /tmp/schroot_wrappers --schroot-name centos5 --schroot-options="-p -d /"
  • custom:
$ echo -e '#!/bin/sh\necho "$@"' > /tmp/custom-script && chmod a+x /tmp/custom-script
$ create-wrappers  -t custom --custom-script=/tmp/custom-script -b /usr/bin -d /tmp/custom_wrappers
  • wrap only specified files:
$ create-wrappers  -t schroot -f gcc:gdb -d /tmp/schroot_wrappers --schroot-name centos5
  • chain multiple wrappers:
$ create-wrappers  -t conda -b ~/miniconda/envs/test/bin -d /tmp/conda_wrappers --conda-env-dir ~/miniconda/envs/test
$ create-wrappers  -t schroot -b /tmp/conda_wrappers -d /tmp/schroot_wrappers --schroot-name centos5


Distributed under the terms of the MIT license, exec-wrappers is free and open source software


If you encounter any problems, please file an issue along with a detailed description.