diff --git a/utils/pypi/gmsh-dev/gmsh b/utils/pypi/gmsh-dev/gmsh
index 80c4a1f290118678723c1abf704763a691417e76..4c11eeafa095ac6a24879495d82c96eef03a5bdf 100755
--- a/utils/pypi/gmsh-dev/gmsh
+++ b/utils/pypi/gmsh-dev/gmsh
@@ -1,20 +1,7 @@
-#!/usr/bin/env python3
+#!/usr/bin/env python
 
-import os
 import sys
-import subprocess
+import gmsh
 
-# this script's directory
-dirname, _ = os.path.split(__file__)
-
-# the directory where the shared lib and the exe are located
-libdirname = os.path.join(dirname, '..', 'lib')
-
-# set environment
-envvar = 'PATH' if 'win' in sys.platform else 'LD_LIBRARY_PATH'
-envval = os.environ[envvar] if envvar in os.environ.keys() else ''
-os.environ[envvar] = libdirname + os.pathsep + envval
-
-# run the exe
-command = os.path.join(libdirname, 'gmsh')
-subprocess.call([command] + sys.argv[1:])
+gmsh.initialize(sys.argv, run = True)
+gmsh.finalize()
diff --git a/utils/pypi/gmsh-nox-dev/gmsh b/utils/pypi/gmsh-nox-dev/gmsh
index 80c4a1f290118678723c1abf704763a691417e76..4c11eeafa095ac6a24879495d82c96eef03a5bdf 100755
--- a/utils/pypi/gmsh-nox-dev/gmsh
+++ b/utils/pypi/gmsh-nox-dev/gmsh
@@ -1,20 +1,7 @@
-#!/usr/bin/env python3
+#!/usr/bin/env python
 
-import os
 import sys
-import subprocess
+import gmsh
 
-# this script's directory
-dirname, _ = os.path.split(__file__)
-
-# the directory where the shared lib and the exe are located
-libdirname = os.path.join(dirname, '..', 'lib')
-
-# set environment
-envvar = 'PATH' if 'win' in sys.platform else 'LD_LIBRARY_PATH'
-envval = os.environ[envvar] if envvar in os.environ.keys() else ''
-os.environ[envvar] = libdirname + os.pathsep + envval
-
-# run the exe
-command = os.path.join(libdirname, 'gmsh')
-subprocess.call([command] + sys.argv[1:])
+gmsh.initialize(sys.argv, run = True)
+gmsh.finalize()
diff --git a/utils/pypi/gmsh/gmsh b/utils/pypi/gmsh/gmsh
index 80c4a1f290118678723c1abf704763a691417e76..4c11eeafa095ac6a24879495d82c96eef03a5bdf 100755
--- a/utils/pypi/gmsh/gmsh
+++ b/utils/pypi/gmsh/gmsh
@@ -1,20 +1,7 @@
-#!/usr/bin/env python3
+#!/usr/bin/env python
 
-import os
 import sys
-import subprocess
+import gmsh
 
-# this script's directory
-dirname, _ = os.path.split(__file__)
-
-# the directory where the shared lib and the exe are located
-libdirname = os.path.join(dirname, '..', 'lib')
-
-# set environment
-envvar = 'PATH' if 'win' in sys.platform else 'LD_LIBRARY_PATH'
-envval = os.environ[envvar] if envvar in os.environ.keys() else ''
-os.environ[envvar] = libdirname + os.pathsep + envval
-
-# run the exe
-command = os.path.join(libdirname, 'gmsh')
-subprocess.call([command] + sys.argv[1:])
+gmsh.initialize(sys.argv, run = True)
+gmsh.finalize()
diff --git a/utils/pypi/setup-wheel.py.in b/utils/pypi/setup-wheel.py.in
index dff14bac9fc8e5f274de155b9557e25f42973e2c..3aa32210b4c3384910a1ce7b12600eeb4bbbdbe9 100644
--- a/utils/pypi/setup-wheel.py.in
+++ b/utils/pypi/setup-wheel.py.in
@@ -28,18 +28,15 @@ if os.path.isfile(sdkdir + '/lib/gmsh-' + libversion + '.dll'):
     libs = [os.path.join(sdkdir, 'lib', 'gmsh.lib'),
             os.path.join(sdkdir, 'lib', 'gmsh-' + libversion + '.dll'),
             os.path.join(sdkdir, 'lib', 'gmsh.jl')]
-    exes = [os.path.join(sdkdir, 'bin', 'gmsh.exe')]
     scripts = [os.path.join(setupdir, 'gmsh'),
                os.path.join(setupdir, 'gmsh.bat')]
 elif os.path.isfile(sdkdir + '/lib/libgmsh.so.' + libversion):
     libs = [os.path.join(sdkdir, 'lib', 'libgmsh.so.' + libversion),
             os.path.join(sdkdir, 'lib', 'gmsh.jl')]
-    exes = [os.path.join(sdkdir, 'bin', 'gmsh')]
     scripts = [os.path.join(setupdir, 'gmsh')]
 elif os.path.isfile(sdkdir + '/lib/libgmsh.' + libversion + '.dylib'):
     libs = [os.path.join(sdkdir + 'lib', 'libgmsh.' + libversion + '.dylib'),
             os.path.join(sdkdir + 'lib', 'gmsh.jl')]
-    exes = [os.path.join(sdkdir, 'bin', 'gmsh')]
     scripts = [os.path.join(setupdir, 'gmsh')]
 else :
     print("library not found")
@@ -52,16 +49,15 @@ def gen_install_list(subdir):
             relpath = os.path.relpath(dirpath, sdkdir)
             data_files.append((relpath, filepaths))
 
-data_files = [('lib', libs + exes), ('bin', scripts)]
+data_files = [('lib', libs)]
 gen_install_list(sdkdir + '/share')
 gen_install_list(sdkdir + '/include')
 
 setuptools.setup(
     name = name,
     version = iversion,
-    description = 'Gmsh app and SDK installer. Gmsh is a three-dimensional '
-                  'finite element mesh generator with built-in pre- and '
-                  'post-processing facilities.',
+    description = 'Gmsh is a three-dimensional finite element mesh generator '
+                  'with built-in pre- and post-processing facilities.',
     long_description = open(os.path.join(setupdir, 'README.rst'), 'r').read(),
     long_description_content_type = 'text/x-rst',
     maintainer = 'Christophe Geuzaine',
@@ -83,6 +79,7 @@ setuptools.setup(
                    'Programming Language :: Python',
                    'Programming Language :: Julia',
                    'Topic :: Scientific/Engineering'],
+    scripts = scripts,
     packages = [''],
     package_dir = {'' : os.path.join(sdkdir + '/lib')},
     data_files = data_files)