mirror of
https://github.com/crewAIInc/crewAI.git
synced 2026-01-09 16:18:30 +00:00
Add PyInstaller compatibility support (fixes #2613)
Co-Authored-By: Joe Moura <joao@crewai.com>
This commit is contained in:
11
README.md
11
README.md
@@ -440,5 +440,16 @@ A: CrewAI uses anonymous telemetry to collect usage data for improvement purpose
|
|||||||
### Q: Where can I find examples of CrewAI in action?
|
### Q: Where can I find examples of CrewAI in action?
|
||||||
A: You can find various real-life examples in the [CrewAI-examples repository](https://github.com/crewAIInc/crewAI-examples), including trip planners, stock analysis tools, and more.
|
A: You can find various real-life examples in the [CrewAI-examples repository](https://github.com/crewAIInc/crewAI-examples), including trip planners, stock analysis tools, and more.
|
||||||
|
|
||||||
|
### Q: Can I package my CrewAI application as an executable?
|
||||||
|
A: Yes, CrewAI is compatible with PyInstaller, which allows you to package your application into a standalone executable. To create an executable:
|
||||||
|
```shell
|
||||||
|
# Install PyInstaller
|
||||||
|
pip install pyinstaller
|
||||||
|
|
||||||
|
# Create the executable
|
||||||
|
pyinstaller --onefile your_script.py
|
||||||
|
```
|
||||||
|
The generated executable will be in the `dist` directory.
|
||||||
|
|
||||||
### Q: How can I contribute to CrewAI?
|
### Q: How can I contribute to CrewAI?
|
||||||
A: Contributions are welcome! You can fork the repository, create a new branch for your feature, add your improvement, and send a pull request. Check the Contribution section in the README for more details.
|
A: Contributions are welcome! You can fork the repository, create a new branch for your feature, add your improvement, and send a pull request. Check the Contribution section in the README for more details.
|
||||||
|
|||||||
12
src/crewai/utilities/pyinstaller_compat.py
Normal file
12
src/crewai/utilities/pyinstaller_compat.py
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
import os
|
||||||
|
import sys
|
||||||
|
|
||||||
|
def is_bundled():
|
||||||
|
"""Check if the application is running from a PyInstaller bundle."""
|
||||||
|
return getattr(sys, 'frozen', False) and hasattr(sys, '_MEIPASS')
|
||||||
|
|
||||||
|
def get_bundle_dir():
|
||||||
|
"""Get the PyInstaller bundle directory if the application is bundled."""
|
||||||
|
if is_bundled():
|
||||||
|
return sys._MEIPASS
|
||||||
|
return None
|
||||||
16
tests/test_pyinstaller_compat.py
Normal file
16
tests/test_pyinstaller_compat.py
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
import unittest
|
||||||
|
from unittest.mock import patch
|
||||||
|
import sys
|
||||||
|
|
||||||
|
from crewai.utilities.pyinstaller_compat import is_bundled, get_bundle_dir
|
||||||
|
|
||||||
|
|
||||||
|
class TestPyInstallerCompat(unittest.TestCase):
|
||||||
|
def test_is_bundled_normal(self):
|
||||||
|
self.assertFalse(is_bundled())
|
||||||
|
|
||||||
|
@patch.object(sys, 'frozen', True, create=True)
|
||||||
|
@patch.object(sys, '_MEIPASS', '/path/to/bundle', create=True)
|
||||||
|
def test_is_bundled_pyinstaller(self):
|
||||||
|
self.assertTrue(is_bundled())
|
||||||
|
self.assertEqual(get_bundle_dir(), '/path/to/bundle')
|
||||||
Reference in New Issue
Block a user