diff --git a/.gitignore b/.gitignore
index 21607aa5ef6ee1951aa292bcdc7a3818629724f2..41fdc26bd8069dfd2202ed579a0a82ca7ed4bfcb 100644
--- a/.gitignore
+++ b/.gitignore
@@ -31,7 +31,6 @@ var/
 #  Usually these files are written by a python script from a template
 #  before PyInstaller builds the exe, so as to inject date/other infos into it.
 *.manifest
-*.spec
 
 # Installer logs
 pip-log.txt
diff --git a/appveyor.yml b/appveyor.yml
index c2a76ae8a3510066d16b65780adf2bd3bb0db041..f2dc262340443eab077437182a4b5a23c0593bf6 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -44,7 +44,7 @@ install:
   - conda info -a
   - conda install --yes conda-build setuptools pip pytest-pylint parameterized cryptography
   - conda install --yes pycryptodomex scrypt pyyaml pytest pytest-mock coverage mock appdirs
-  - conda install --yes ecdsa requests future websocket-client pytz six Click events prettytable 
+  - conda install --yes ecdsa requests future websocket-client pytz six Click events prettytable pyinstaller
 
 
   # Upgrade to the latest version of pip to avoid it displaying warnings
@@ -65,8 +65,8 @@ test_script:
 
 after_test:
   # If tests are successful, create binary packages for the project.
-  - "pip install wheel"
-  - "python setup.py bdist_wheel"
+  - pyinstaller beempy-onedir.spec
+  - 7z a beempy.zip %APPVEYOR_BUILD_FOLDER%\dist\beempy
   #- "%CMD_IN_ENV% python setup.py bdist_wininst"
   #- "%CMD_IN_ENV% python setup.py bdist_msi"
   - ps: "ls dist"
diff --git a/beempy-onedir.spec b/beempy-onedir.spec
new file mode 100644
index 0000000000000000000000000000000000000000..c1be18ef7620e694b3d56ba4c889269f5393a0ba
--- /dev/null
+++ b/beempy-onedir.spec
@@ -0,0 +1,48 @@
+# -*- mode: python -*-
+
+import os
+import glob
+import platform
+
+
+block_cipher = None
+os_name = platform.system()
+binaries = []
+
+data_files = []
+
+
+a = Analysis(['beem/cli.py'],
+             pathex=['beem'],
+             binaries=binaries,
+             datas=data_files,
+             hiddenimports=[],
+             hookspath=[],
+             runtime_hooks=[],
+             excludes=['matplotlib', 'scipy', 'pandas', 'numpy', 'PyQt5', 'tkinter'],
+             win_no_prefer_redirects=False,
+             win_private_assemblies=False,
+             cipher=block_cipher)
+pyz = PYZ(a.pure, a.zipped_data,
+             cipher=block_cipher)
+
+exe = EXE(
+    pyz,
+    a.scripts,
+    exclude_binaries=True,
+    name='beempy',
+    debug=False,
+    strip=False,
+    upx=False,
+    console=True,
+    icon='beempy.ico',
+)
+coll = COLLECT(
+    exe,
+    a.binaries,
+    a.zipfiles,
+    a.datas,
+    name='beempy',
+    strip=False,
+    upx=False
+)
\ No newline at end of file
diff --git a/beempy.ico b/beempy.ico
new file mode 100644
index 0000000000000000000000000000000000000000..6c0e3ef7175c5fc768dff3432a58dd695acf1a1c
Binary files /dev/null and b/beempy.ico differ
diff --git a/beempy.spec b/beempy.spec
new file mode 100644
index 0000000000000000000000000000000000000000..c1d6559ef69971760daa2a85eefa86550c966135
--- /dev/null
+++ b/beempy.spec
@@ -0,0 +1,40 @@
+# -*- mode: python -*-
+
+import os
+import glob
+import platform
+
+
+block_cipher = None
+os_name = platform.system()
+binaries = []
+
+data_files = []
+
+
+a = Analysis(['beem/cli.py'],
+             pathex=['beem'],
+             binaries=binaries,
+             datas=data_files,
+             hiddenimports=[],
+             hookspath=[],
+             runtime_hooks=[],
+             excludes=['matplotlib', 'scipy', 'pandas', 'numpy', 'PyQt5', 'tkinter'],
+             win_no_prefer_redirects=False,
+             win_private_assemblies=False,
+             cipher=block_cipher)
+pyz = PYZ(a.pure, a.zipped_data,
+             cipher=block_cipher)
+exe = EXE(pyz,
+          a.scripts,
+          a.binaries,
+          a.zipfiles,
+          a.datas,
+          name='beempy',
+          debug=False,
+          strip=False,
+          upx=False,
+          runtime_tmpdir=None,
+          console=True,
+          icon='beempy.ico',
+ )