This will allow the code to be distributed as a single complete repo (including the experiments interpreter).
pip install pyinstaller
cd ~/xmen
pyinstaller experiments/xmen/main.py --hidden-import='pkg_resources.py2_warn' --name xmen
# Note that pkg_resources.py2_warn is not found automatically as a dependency
# To add to your bashrc / zshrc run
echo alias xmen="~/xmen/dist/xmen/xmen" >> ~/.zshrc
Xmen can then be distributed by simply copying the dist/xmen/xmen
folder
to others without any environment dependency.
If you are finding that xmen is running too slow this is most likely as a result of slow imports within your own project. To avoid slow imports adopt these good practices:
- Use lazy imports where possible: Instead of importing
everything at the start of your experiment module
add your imports to the experimens
run
method. For experiments which require a lot of other dependencies this can significantly speed up the command line tools which typically only call an experiments__init__
andto_root
methods. This will have exactly the same overhead as having global imports when it comes to running the experiment. The import time is instead distributed throughout the execution of the program instead of all at start up avoiding unnessercary wait times. - Use minimal environemnts: Make sure your experiments environement is as slim as possible containing only the packages that are neccessary to run your code.
- Freeze: Freezing xmen in a stand alone distribution can help to speed up the time looking for xmens dependencies in a bloated enviroment (see avove).