Skip to content
Scoop for Rez - Install Windows software from a selection of 500+ packages and counting
Python Batchfile
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
bin
python/scoopz
.gitignore
LICENSE
README.md
install.py
package.py

README.md

Install anything from Scoop as a Rez package.

See also


Features

  • Large selection Install any of the 500+ available packages from Scoop, like python and git
  • Try before you buy Like apt-get and yum, no packages are actually installed until you've witnessed and confirmed what Scoop comes up with, including complex dependencies.

Installation

This repository is a Rez package, here's how you can install it.

$ git clone https://github.com/mottosso/rez-scoopz.git
$ cd rez-scoopz
$ rez build --install

Usage

scoopz

scoopz is used like any other Rez package, and comes with a handy install executable for convenient access.

$ rez env scoopz -- install python
$ rez env python -- python --version
Python 3.7.3

Which is the equivalent of calling..

$ rez env scoopz
> $ install python

And, for the advanced user, it may also be used as a Python package. Note that it requires Rez itself to be present as a package, along with a copy of Python that isn't coming from Rez.

Try before I buy?

Prior to creating a package and polluting your package repository, packages are prepared and presented to you for confirmation.

rez env scoopz -- install curl
Initialising Scoop 2019.05.15.6... ok - 0.04s
Reading package lists... ok - 21.38s
Parsing Scoop apps... ok - 0.01s
Discovering existing packages... ok - 0.00s
The following NEW packages will be installed:
  7zip    19.00     platform-windows/arch-AMD64
  curl    7.64.1_1  platform-windows/arch-AMD64
Packages will be installed to C:\Users\manima\packages
After this operation, 12.36 mb will be used.
Do you want to continue? [Y/n]

How does this work?

$ rez env python rez scoopz
> $ python -m scoopz --help
usage: __main__.py [-h] [--verbose] [--release] [--prefix PATH] [-y] [-q]
                   request

positional arguments:
  request        Packages to install, e.g. python curl

optional arguments:
  -h, --help     show this help message and exit
  --verbose      Include Scoop output amongst scoopz messages.
  --release      Write to REZ_RELEASE_PACKAGES_PATH
  --prefix PATH  Write to this exact path
  -y, --yes      Do not ask to install, just do it
  -q, --quiet    Do not print anything to the console

FAQ

Why rez-scoopz? Why not X?

This project came about as a requirement for a separate project, here are the developer "journal" from there.

Beyond that, packaging external software with Rez is a pain. Some software is available through Scoop, such as python so that you won't have to worry about packaging it yourself.

Why is initialisation of Scoop taking so long?

For each new package installed, a kind of virtual environment is created for Scoop. This environment is generated using directory symlinks where possible, and plain copies elsewhere. If you experience a delay in initialising Scoop (anywhere beyond 1 second), test whether you are able to perform a mklink /D. If not, you may want to consider enabling it to save between 5-20 seconds of time spent installing new packages.

Control this behavior using the these environment variables.

  • SCOOPZ_JUNCTION=1 Use Junction rather than directory symlinks. These are supported by non-privileged users, but does not work across disk partitions.
  • SCOOPZ_COPY=1 Do not use symlinks, perform a plain file-copy. This is the safest option, but also the slowest (roughly 10 additional seconds per invokation)

How come Scoop's package repository is referenced by commit ID?

The current version of this package, and in effect Scoop, is 2019-05-15 (see package.py).

Because each Rez package is idempotent, an effort is made to disable Scoops native auto-update functionality, along with maintaining a fixed relationship between the version of Scoop and version of "bucket", which is what Scoop calls its package repository. Scoop is only ever compatible with a single version of a repository, as both packages and API changes frequently over time.

To update to a newer version, specify either a tag, such as 2019-05-15 or commit SHA for both Scoop and bucket. This is important, else Scoop may not work.

How does this work?

Rez wraps Scoop, forwarding any call made and parsing its response. Whenever an "app" is installed from one of its "buckets", the app is later converted into a Rez package and installed like any other.

$ rez env scoopz -- install python
     |
     |                        .-------------------> ~/packages/python/3.7.3
     |                        |
.----o-------- scoopz --------o----.
|    |                        |    |
| .--v-------- Scoop ---------o--. |
| |                              | |
| |                              | |
| |                              | |
| |                              | |
| |______________________________| |
|                                  |
`----------------------------------`


You can’t perform that action at this time.