Pakit is a small python based package manager that builds programs from source.
Pakit provides:
- A package manager interface to install, remove & update programs.
- A simple Recipe specification to build programs from source code.
- Premade and tested recipes maintained by pakit.
When you install a program Pakit will...
- download the source into a silo in
pakit.paths.source
and build it. - install the program into a silo under
pakit.paths.prefix
. - link the silo to the
pakit.paths.link
directory.
Want a longer explanation? See the Overview section.
The following demonstration covers most of the basic functions.
Try the demo yourself after installing pakit.
A Vagrantfile
is in the root of the project. Read it for details.
To quickly try demo:
vagrant box add boxcutter/ubuntu1510
vagrant up
vagrant ssh
When done, you can remove all traces with:
vagrant destroy -f
vagrant box remove boxcutter/ubuntu1510 --all
To use pakit:
- Ensure you have a build enviornment for compiling the programs.
- Fetch pakit via pip or github.
- Modify your $PATH.
At this point pakit has two limitations to be aware of:
- Relies on user's build environment.
- Pakit recipes can only depend on things pakit can build, currently limited pool. User needs to install any dependencies pakit can't build.
To use pakit, I suggest you have...
- c++ build environment
- git
- anything a recipe depends on that pakit can't build
For Ubuntu install these packages:
sudo apt-get install build-essential automake autoconf python-pip git liblzma-dev libevent-dev ncurses-dev
Fetch the latest from the source. Works unless the build badge says failing.
git clone https://github.com/starcraftman/pakit.git
export PATH=$(pwd)/pakit/bin:$PATH
python pakit/setup.py deps release
Install the latest stable pip release. It might be old but working.
sudo -H pip install pakit
By default, pakit will install programs under pakit.paths.prefix
and link everything to pakit.paths.link
.
To use the built programs, pakit.paths.link
/bin must be on your $PATH.
So for example, with the default value of pakit.paths.link
, you would need to:
export PATH=/tmp/pakit/links/bin:$PATH
The above exports will only last for the terminal session.
To make them permanent for bash, edit $HOME/.bashrc
or $HOME/.bash_aliases
.
From inside the pakit source folder:
- Help:
pakit --help
- Consult man:
man pakit
- Read pydocs:
pydoc pakit
orpydoc pakit.shell
and so on... - Simple UML Diagrams:
python setup.py uml
- Install all development packages:
python setup.py deps
- Run the test suite:
tox
- See Waffle for things I'm working on.
- Read
DESIGN.md
for details on design. A bit out of date.
- @starcraftman/Jeremy Pallats
Basically I want to make a universal package manager on python. Runs everywhere, builds anything and handles dependencies. A bit like a meta build tool tying arbitrary recipes together. At the end of the day, will probably resemble Homebrew at least a little.
Importantly, the recipes should be configurable via a single YAML file
that users can modify without changing the recipes. Say you want to pass
particular flags to the vim
or ag
build, you'd just put them in an entry
in the config.
Expected Feature Overview:
- Python only, with minimal dependencies.
- Package manager interface, install remove and update recipes.
- 100% tested, framework & supported recipes.
- Should work on any POSIX system, emphasis on Linux.
- Simple recipe specification.
- Configuration via a single YAML file.
- Available via pip.
- Traceability via logs for every command.
- Premade & tested recipes available for use.
See the design file for more details.