I decided that I want to create a standalone IPython executable that I can distribute.
This executable should be:
- Run as a standalone, even if there is no Python installed on the machine
- Have all required packages even if they aren't installed on the machine
- Doesn't have extra packages in it (just what needed)
- Single executable (no shared objects)
In order to achieve this task I used PyInstaller, which according to this StackOverflow post seems like one of the good options to do so.
I also wanted to make my environment as clean as possible, so I installed virtualenv:
virtualenv ipython_env/
source ipython_env/bin/activate
Inside this environment, I ran the following pip command to install PyInstaller and IPython:
pip install pyinstaller
pip install ipython
Following rgtk's comment: https://stackoverflow.com/a/31412509/132847, I created the following script:
from IPython import embed
embed()
and called it ipython.py
From PyInstaller help manual:
-F, --onefile Create a one-file bundled executable.then, I ran:
pyinstaller -F ipython.py
The output of the script generated a (default named) directory called dist which the output binary was in.
$ file dist/ipython
dist/ipython: Mach-O 64-bit executable x86_64
$ otool -L ./dist/ipython
./dist/ipython:
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1226.10.1)
/usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.5)
Running this binary:
$ ./dist/ipython
Python 2.7.16 (default, Apr 12 2019, 15:32:40)
Type "copyright", "credits" or "license" for more information.
IPython 5.8.0 -- An enhanced Interactive Python.
? -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help -> Python's own help system.
object? -> Details about 'object', use 'object??' for extra details.
In [1]:
That's all for today.
Good luck!
Tal Kain
Comments
Post a Comment