summaryrefslogtreecommitdiff
path: root/Ubuntu/executable.md
blob: 435ed88a16a5c52a7b470262625addc230668a05 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
eSim Executable (Ubuntu OS)
====

> Note: It is not updated for the recently ported GUI to PyQt5 and Ubuntu 20.04 LTS. Currently, packaging for Ubuntu OS is done directly with the source code and not the executable.

It contains the documentation for making eSim executable using PyInstaller on Ubuntu 16.04 and above.


## Freeze eSim source code:

> Note: pip tool corresponds to Python-3.5.2 on Ubuntu 16.04 and Python-3.6.9 on Ubuntu 18.04

1. Download `virtualenv` package and create virtual environment as:

        $ pip install virtualenv
        $ virtualenv -p /usr/bin/python3 eSim

            OR
        
        $ sudo apt install -y python3-venv
        $ python3 -m venv eSim

2. Activate the virtual environment as:
    
        $ source eSim/bin/activate

3. Install all Python dependencies for eSim within the virtual environment as:

        $ pip install wheel
        $ pip install pyinstaller
        $ pip install --upgrade 'matplotlib==3.0.3'
        $ pip install tornado
        $ pip install --upgrade 'setuptools<45.0.0'
        $ sudo apt install build-essential python3-dev libqt4-dev qt4-dev-tools
        $ mkdir eSim/build
        $ cd eSim/build/
        $ wget http://sourceforge.net/projects/pyqt/files/PyQt4/PyQt-4.12.3/PyQt4_gpl_x11-4.12.3.tar.gz
        $ wget https://www.riverbankcomputing.com/static/Downloads/sip/4.19.21/sip-4.19.21.tar.gz
        $ tar -xzvf sip-4.19.21.tar.gz
        $ tar -xvzf PyQt4_gpl_x11-4.12.3.tar.gz
        $ cd sip-4.19.21/
        $ python configure.py --sip-module PyQt4.sip
        $ make
        $ make install
        $ cd ../PyQt4_gpl_x11-4.12.3/
        $ python configure.py
        $ make
        $ make install

4. Test whether only eSim dependencies are available or not:

        $ pip freeze

> Note : Following dependencies should be available -
>   - PyQt4
>   - matplotlib
>   - numpy
>   - dateutil
>   - pyparsing
>   - six
>   - cycler.py

5. Create spec file as:

        $ pyi-makespec --onefile -n eSim <path_to_eSim>/src/frontEnd/Application.py

6. Add `PyQt4.sip` as hiddenimports in the generated spec file.

7. Create onefile executable using pyinstaller as:
        
        $ pyinstaller -F --clean eSim.spec

8. Verify whether all eSim `src` files (`*.py`) have been included in `Analysis-00.toc` file under the build folder generated by PyInstaller.


## Fully-Static Bundling of eSim Executable:

1. To create a [fully-static bundled version](https://github.com/pyinstaller/pyinstaller/wiki/FAQ#GNULinux) of eSim (through PyInstaller), use a tool like [StaticX](https://github.com/JonathonReinhart/staticx/).

2. To create fully-static eSim :

    - Activate the virtual environment as:
    
            $ source eSim/bin/activate

    - Install StaticX as:

            $ pip install staticx
            $ pip install patchelf-wrapper

    - Create static eSim as:

            $ staticx /path/to/executable/eSim /path/to/output/executable/eSim

3. To verify if all dynamic libraries are removed :
    
    - Type following command in a terminal :

            $ ldd path/to/output/executable/eSim

    - Output of above command should be similar to `    not a dynamic executable`