Poor man's package manager (like brew link without the brew)
Project description
pkgsym — A poor man's package manager (like brew link but without the brew)
Usage and Motivation
pkgsym is a utility to symlink and un-symlink a package under from a self-contained directory to a prefix.
Say you're installing a package from source without your package manager. You perform the Unix magic invocation (or some on Windows):
./configure --prefix=/usr/local
make
sudo make install
Now you have a bunch of stuff under /usr/local. How do you determine what files came from what package? How do you uninstall the package? (Not all build systems provide a make uninstall.)
Enter pkgsym. Now you can install the package to a self-contained directory, something like this:
./configure --prefix=/usr/local/opt/foopkg
make
sudo make install
So now foo's command is something like /usr/local/opt/foo/bin/foocmd, which definitely isn't going to be in your PATH by default, and you probably don't want to add every odd directory of /usr/local/opt/*/bin to your PATH either.
Homebrew takes the approach of symlinking packages into a prefix. That's exactly what pkgsym does. Now you can finish off your package installation:
sudo pkgsym link --system foo
That will take any directories under /usr/local/opt/foo/ and symlink their contents to /usr/local/{dir}/{file}, creating any directories as necessary. So /usr/local/opt/foo/bin/cmd is symlinked to /usr/local/bin/foocmd, /usr/local/opt/foo/lib/libfoo.so is symlinked to /usr/local/lib/libfoo.so, etc. Subdirectories are handled recursively.
Now to uninstall the package, simply run:
sudo pkgsym unlink --system foo
sudo rm -rf /usr/local/opt/foo
Hey, what's that --system?
pkgsym supports any arbitrary package prefix. You could install foo to C:\Packages\opt\foo if you want, and then have foocmd as C:\Packages\bin\foocmd with something like:
cmake -B build -DCMAKE_INSTALL_PREFIX=C:/Packages/opt/foo
cmake --build build
cmake --install build
pkgsym --prefix C:/Packages link foo
(Forward slashes and backslashes are both supported for Windows).
--system is a shortcut for --prefix /usr/local, and --user is a shortcut for --prefix ~/.local. --user is the default, but is still available as an explicit argument for clarity.
What made this necessary? Are you okay?
Listen installing packages from source on Windows sucks okay? This script is basically a glorified for i in $prefix/opt/**/*; do ln -s "${i:bash/string/manipulation}", but with it as my hammer I've been able to manage dependency hell on Windows with ad-hoc packages.
If you have a real package manager available to you for the thing you want, definitely use that instead. pkgsym is for the unfortunate cases where you do not.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pkgsym-0.2.4.tar.gz.
File metadata
- Download URL: pkgsym-0.2.4.tar.gz
- Upload date:
- Size: 6.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ca4063cb38fe3e7effd64bff6f1197a11613b7ae3ea8a980a83caa7f0306fcfe
|
|
| MD5 |
ee611a16f006562496eff02418e40682
|
|
| BLAKE2b-256 |
907e634f211616ff8e2abff2abf6f76bf5847532143635a6524124b1762c310b
|
File details
Details for the file pkgsym-0.2.4-py3-none-any.whl.
File metadata
- Download URL: pkgsym-0.2.4-py3-none-any.whl
- Upload date:
- Size: 6.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
841fe5700e491f1c11e69c1fce77cedd8d6f792297ba759e51d311f82b96f013
|
|
| MD5 |
da72e62f2d3454921bd837ea1926bf4d
|
|
| BLAKE2b-256 |
a175b8a68e0976b94e487501a6f751ee33297200f2d802f2a1fa37e33599585b
|