|
| 1 | +streamlink/windows-installer |
| 2 | +==== |
| 3 | + |
| 4 | +Windows installer builds for [Streamlink](https://github.com/streamlink/streamlink). |
| 5 | + |
| 6 | +Please see [Streamlink's install documentation](https://streamlink.github.io/install.html) for more details and different install methods. |
| 7 | + |
| 8 | + |
| 9 | +## Installer contents |
| 10 | + |
| 11 | +- [an embedded Python environment](https://github.com/streamlink/python-windows-embed) |
| 12 | +- [Streamlink and its dependencies](https://github.com/streamlink/streamlink) |
| 13 | +- [FFmpeg, for muxing streams](https://github.com/streamlink/FFmpeg-Builds) |
| 14 | + |
| 15 | + |
| 16 | +## Flavors |
| 17 | + |
| 18 | +- Python 3.10, x86_64 |
| 19 | +- Python 3.10, x86 |
| 20 | +- Python 3.8, x86_64 |
| 21 | +- Python 3.8, x86 |
| 22 | + |
| 23 | +[Python 3.8](https://endoflife.date/python) is the last Python branch which still supports [Windows 7](https://endoflife.date/windows). |
| 24 | + |
| 25 | + |
| 26 | +## Download |
| 27 | + |
| 28 | +### Stable releases |
| 29 | + |
| 30 | +Builds of official Streamlink releases. |
| 31 | +Download from the [releases page](https://github.com/streamlink/windows-installer/releases). |
| 32 | + |
| 33 | +### Nightly builds |
| 34 | + |
| 35 | +Built once each day at midnight UTC from Streamlink's master branch. |
| 36 | +This includes the most recent changes, but is not considered "stable". |
| 37 | +Download from the build-artifacts of the [scheduled nightly build runs](https://github.com/streamlink/windows-installer/actions?query=event%3Aschedule+is%3Asuccess+branch%3Amaster) (requires a GitHub login). |
| 38 | + |
| 39 | + |
| 40 | +## Notes |
| 41 | + |
| 42 | +The installers perform the following tasks: |
| 43 | + |
| 44 | +- The `bin` subdirectory of the installation path gets added to the system's `PATH` environment variable, so the `streamlink.exe` and `streamlinkw.exe` executables can be resolved without having to specify the absolute or relative path to these files. |
| 45 | +- An entry gets added to the system's list of installed software, and an uninstaller gets generated. |
| 46 | +- When installing, the `pkgs` subdirectory gets deleted recursively before unpacking any files, to ensure that old and unsupported python package files of previous installations don't exist when upgrading without uninstalling. |
| 47 | + |
| 48 | + |
| 49 | +## Additional notes |
| 50 | + |
| 51 | +Both the embedded Python builds and FFmpeg builds are unofficial and unsigned, as we're building them ourselves. Due to this circumstance, certain antivirus programs might trigger false positive alerts. The sources, build instructions and build logs can be read and observed in the repositories linked above. |
| 52 | + |
| 53 | + |
| 54 | +## Developer notes |
| 55 | + |
| 56 | +### Build requirements |
| 57 | + |
| 58 | +- GNU/Linux environment |
| 59 | +- [git](https://git-scm.com/) |
| 60 | +- [Python 3.7+](https://www.python.org/) and the most recent version of [pip](https://pip.pypa.io/en/stable/) |
| 61 | + - [virtualenv](https://pypi.org/project/virtualenv/) |
| 62 | + - [pynsist](https://pypi.org/project/pynsist/) >=2.8 |
| 63 | + - [distlib](https://pypi.org/project/distlib/) >=0.3.3, !=0.3.4 |
| 64 | +- [NSIS](https://nsis.sourceforge.io/Main_Page) |
| 65 | +- [jq](https://stedolan.github.io/jq/) |
| 66 | +- [gawk](https://www.gnu.org/software/gawk/) |
| 67 | +- [Imagemagick](https://imagemagick.org/index.php) |
| 68 | +- [Inkscape](https://inkscape.org/) |
| 69 | + |
| 70 | +### How to |
| 71 | + |
| 72 | +The installer build configurations can be found in the `config.json` file. Here, the default Streamlink source and version are defined that will be used when building, in addition to installer assets, and most importantly, the various build flavors. |
| 73 | + |
| 74 | +The `installer.cfg` file defines the pynsist configuration, and the `installer.nsi` file is used as an extension for pynsist's default NSIS template. |
| 75 | + |
| 76 | +Each build flavor includes the source of an embedded Python build and the fixed set of Streamlink's dependency versions plus checksums for that specific build (Streamlink doesn't provide its own dependency lockfile). |
| 77 | + |
| 78 | +In order to get an update for the dependency JSON data of a specific build flavor, run |
| 79 | + |
| 80 | +```sh |
| 81 | +./get-dependencies.sh "${FLAVOR}" "${GITSOURCE}" "${GITREF}" |
| 82 | +``` |
| 83 | + |
| 84 | +with `GITSOURCE` and `GITREF` being an optional override. |
| 85 | + |
| 86 | +Building the installer works the same way, by running |
| 87 | + |
| 88 | +```sh |
| 89 | +./build.sh "${FLAVOR}" "${GITSOURCE}" "${GITREF}" |
| 90 | +``` |
| 91 | + |
| 92 | +with `GITSOURCE` and `GITREF` being once again optional overrides. |
| 93 | +Building the installer requires an activated virtual Python environment. |
| 94 | + |
| 95 | +Successfully built installers can be found in the `./dist` directory. NSIS unfortunately doesn't support reproducible builds, so the checksums will always vary. |
0 commit comments