2020-06-03 08:06:39 +08:00
# PyInstaller-Action-Windows
2020-06-02 22:50:15 +08:00
Github Action for building executables with PyInstaller
To build your application, you need to specify where your source code is via the `path` argument, this defaults to `src` .
The source code directory should have your `.spec` file that PyInstaller generates. If you don't have one, you'll need to run PyInstaller once locally to generate it.
2020-06-25 21:30:22 +08:00
Also if you have another program `.spec` file you can set specific pyinstaller `.spec` file by `spec: <YOUR_SPEC_FILE_NAME>`
2020-06-02 22:50:15 +08:00
2021-04-16 07:17:26 +08:00
If the `src` folder has a `requirements.txt` file, the packages will be installed into the environment before PyInstaller runs. This can also be specified via the `requirements` argument.
2020-06-02 22:50:15 +08:00
2020-06-03 07:58:23 +08:00
If you wish to specify a package mirror, this is possibly via the `pypi_url` and/or the `pypi_index_url` , these defaults are:
- `pypi_url` = `https://pypi.python.org/`
- `pypi_index_url` = `https://pypi.python.org/simple`
2020-06-04 07:25:21 +08:00
> If you are using the default Python `gitignore` file, ensure to remove `.spec`.
> This action uses [Wine](https://www.winehq.org) to emulate windows inside Docker for packaging POSIX executables.
2024-05-24 10:48:50 +08:00
## CURRENT ISSUE: `ModuleNotFoundError pkg_resources.extern`
The pkg_resources hook for setuptools>=v70.0.0 is currently missing in pyinstaller 5.13, which is used in this Github Action.
To address this, a future version of this project will incorporate pyinstaller>=6.7 to resolve the issue.
However, in the interim, it is necessary to manually include a hiddenimport to the `.spec` file.
Include `hiddenimports=['pkg_resources.extern'],` in your `.spec` file, something like this:
```
a = Analysis(
hiddenimports=['pkg_resources.extern'],
)
```
For further assistance, please refer to the following issues:
- JackMcKew/pyinstaller-action-windows#51
- pyinstaller/pyinstaller#8554
2020-06-02 22:50:15 +08:00
## Example usage
2023-07-11 20:48:17 +08:00
There's an example repository where you can see this action in action: < https: / / github . com / JackMcKew / pyinstaller-action-windows-example > .
2020-06-15 19:10:01 +08:00
2020-06-02 22:50:15 +08:00
Include this in your `.github/workflows/main.yaml` :
```yaml
- name: PyInstaller Windows
2020-06-08 19:01:01 +08:00
uses: JackMcKew/pyinstaller-action-windows@main
2023-07-19 08:36:37 +08:00
with:
path: src
2020-06-02 22:50:15 +08:00
```
## Full Example
Here is an entire workflow for:
- Packaging an application with PyInstaller
- Uploading the packaged executable as an artifact
``` yaml
name: Package Application with Pyinstaller
on:
push:
2022-10-18 20:45:27 +08:00
branches: [ main ]
2020-06-02 22:50:15 +08:00
pull_request:
2022-10-18 20:45:27 +08:00
branches: [ main ]
2020-06-02 22:50:15 +08:00
jobs:
build:
runs-on: ubuntu-latest
steps:
2024-10-18 14:29:10 +08:00
- uses: actions/checkout@v4
2020-06-02 22:50:15 +08:00
- name: Package Application
2020-06-08 19:01:01 +08:00
uses: JackMcKew/pyinstaller-action-windows@main
2020-06-02 22:50:15 +08:00
with:
path: src
2024-10-18 14:29:10 +08:00
- uses: actions/upload-artifact@v4
2020-06-02 22:50:15 +08:00
with:
name: name-of-artifact
path: src/dist/windows
```
2020-06-03 07:58:23 +08:00
2020-06-15 19:10:01 +08:00
## FAQ
If you get this error: `OSError: [WinError 123] Invalid name: '/tmp\\*'` , ensure your path is correctly configured, the default is `src` .
2020-06-03 07:58:23 +08:00
## Sources
A big thank you to all the contributors over at < https: / / github . com / cdrx / docker-pyinstaller > , this action is just a modified version of their docker container, thank you!