feat: Implement cross-platform executable compilation and distribution (WIP)
This work-in-progress pull request aims to transform exo into an easily installable executable for multiple platforms, streamlining the distribution process.
Objectives:
- [x] Create a comprehensive PyInstaller spec file to bundle all required dependencies
- [x] Implement CI/CD workflows for automated executable builds
- [x] Ensure mac builds work
- [ ] Ensure linux builds work
- [ ] Ensure windows builds work
- [ ] Conduct comprehensive cross-platform testing to ensure complete functionality
- [ ] Package the executable in an installation-ready format
- [ ] Develop scripts for submission to package managers (e.g., Homebrew)
Key improvements:
- Simplified installation process for end-users
- Broader platform compatibility
- Automated build and distribution pipeline
Resolves #302
Update: Implementing the CI/CD workflows using github actions as the workflow from PR #332 builds for Linux only, and I am not able to develop macos and windows runners for circleci with the free plan.
Update: Implementing the CI/CD workflows using github actions as the workflow from PR #332 builds for Linux only, and I am not able to develop macos and windows runners for circleci with the free plan.
I approved the circleci run.
Any other blockers or anything you need from me? This looks great so far.
Update: During testing, I've found that Linux support needs some additional work. While exo runs smoothly on MacOS, I'm encountering challenges running it on Linux environments (tested on AWS Ubuntu instances with both CPU and GPU setups). The CUDA-specific issues (similar to #155) are one part of this, but there seem to be broader Linux compatibility considerations to address.
I'm happy to work on getting the Linux scripts and builds working - would appreciate any insights from others who have successfully run exo on Linux environments! Once we have a clear path for Linux support, I can proceed with the packaging and distribution work.
I'll have a look at running the pytorch inference engine from #139 to see whether that will fix most issues.