diff --git a/openlp/__main__.py b/openlp/__main__.py
new file mode 100644
index 000000000..7f820c240
--- /dev/null
+++ b/openlp/__main__.py
@@ -0,0 +1,86 @@
+# -*- coding: utf-8 -*-
+# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4
+
+##########################################################################
+# OpenLP - Open Source Lyrics Projection #
+# ---------------------------------------------------------------------- #
+# Copyright (c) 2008-2019 OpenLP Developers #
+# ---------------------------------------------------------------------- #
+# This program is free software: you can redistribute it and/or modify #
+# it under the terms of the GNU General Public License as published by #
+# the Free Software Foundation, either version 3 of the License, or #
+# (at your option) any later version. #
+# #
+# This program is distributed in the hope that it will be useful, #
+# but WITHOUT ANY WARRANTY; without even the implied warranty of #
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
+# GNU General Public License for more details. #
+# #
+# You should have received a copy of the GNU General Public License #
+# along with this program. If not, see . #
+##########################################################################
+"""
+The entrypoint for OpenLP
+"""
+import atexit
+import faulthandler
+import logging
+import multiprocessing
+import sys
+
+# from OpenGL import GL
+
+from openlp.core.app import main
+from openlp.core.common import is_macosx, is_win
+from openlp.core.common.applocation import AppLocation
+from openlp.core.common.path import create_paths
+
+log = logging.getLogger(__name__)
+error_log_file = None
+
+
+def tear_down_fault_handling():
+ """
+ When Python exits, close the file we were using for the faulthandler
+ """
+ global error_log_file
+ error_log_file.close()
+
+
+def set_up_fault_handling():
+ """
+ Set up the Python fault handler
+ """
+ global error_log_file
+ # Create the cache directory if it doesn't exist, and enable the fault handler to log to an error log file
+ try:
+ create_paths(AppLocation.get_directory(AppLocation.CacheDir))
+ error_log_file = (AppLocation.get_directory(AppLocation.CacheDir) / 'error.log').open('wb')
+ atexit.register(tear_down_fault_handling)
+ faulthandler.enable(error_log_file)
+ except OSError:
+ log.exception('An exception occurred when enabling the fault handler')
+ atexit.unregister(tear_down_fault_handling)
+ if error_log_file:
+ error_log_file.close()
+
+
+def start():
+ """
+ Instantiate and run the application.
+ """
+ set_up_fault_handling()
+ # Add support for using multiprocessing from frozen Windows executable (built using PyInstaller),
+ # see https://docs.python.org/3/library/multiprocessing.html#multiprocessing.freeze_support
+ if is_win():
+ multiprocessing.freeze_support()
+ # Mac OS X passes arguments like '-psn_XXXX' to the application. This argument is actually a process serial number.
+ # However, this causes a conflict with other OpenLP arguments. Since we do not use this argument we can delete it
+ # to avoid any potential conflicts.
+ if is_macosx():
+ sys.argv = [x for x in sys.argv if not x.startswith('-psn')]
+ main()
+
+
+if __name__ == '__main__':
+ start()
diff --git a/run_openlp.py b/run_openlp.py
index b686c8491..b75e3a6b6 100755
--- a/run_openlp.py
+++ b/run_openlp.py
@@ -21,67 +21,9 @@
# along with this program. If not, see . #
##########################################################################
"""
-The entrypoint for OpenLP
+A compatibility entrypoint for OpenLP
"""
-import atexit
-import faulthandler
-import logging
-import multiprocessing
-import sys
-
-# from OpenGL import GL
-
-from openlp.core.app import main
-from openlp.core.common import is_macosx, is_win
-from openlp.core.common.applocation import AppLocation
-from openlp.core.common.path import create_paths
-
-log = logging.getLogger(__name__)
-error_log_file = None
-
-
-def tear_down_fault_handling():
- """
- When Python exits, close the file we were using for the faulthandler
- """
- global error_log_file
- error_log_file.close()
-
-
-def set_up_fault_handling():
- """
- Set up the Python fault handler
- """
- global error_log_file
- # Create the cache directory if it doesn't exist, and enable the fault handler to log to an error log file
- try:
- create_paths(AppLocation.get_directory(AppLocation.CacheDir))
- error_log_file = (AppLocation.get_directory(AppLocation.CacheDir) / 'error.log').open('wb')
- atexit.register(tear_down_fault_handling)
- faulthandler.enable(error_log_file)
- except OSError:
- log.exception('An exception occurred when enabling the fault handler')
- atexit.unregister(tear_down_fault_handling)
- if error_log_file:
- error_log_file.close()
-
-
-def start():
- """
- Instantiate and run the application.
- """
- set_up_fault_handling()
- # Add support for using multiprocessing from frozen Windows executable (built using PyInstaller),
- # see https://docs.python.org/3/library/multiprocessing.html#multiprocessing.freeze_support
- if is_win():
- multiprocessing.freeze_support()
- # Mac OS X passes arguments like '-psn_XXXX' to the application. This argument is actually a process serial number.
- # However, this causes a conflict with other OpenLP arguments. Since we do not use this argument we can delete it
- # to avoid any potential conflicts.
- if is_macosx():
- sys.argv = [x for x in sys.argv if not x.startswith('-psn')]
- main()
-
+from openlp import __main__
if __name__ == '__main__':
- start()
+ __main__.start()
diff --git a/setup.py b/setup.py
index d88b94755..51caf0fe3 100644
--- a/setup.py
+++ b/setup.py
@@ -161,7 +161,6 @@ using a computer and a data projector.""",
url='https://openlp.org/',
license='GPL-3.0-or-later',
packages=find_packages(exclude=['ez_setup', 'tests*']),
- py_modules=['run_openlp'],
include_package_data=True,
zip_safe=False,
python_requires='>=3.6',
@@ -209,5 +208,5 @@ using a computer and a data projector.""",
'python-xlib; platform_system=="Linux"'
],
setup_requires=['pytest-runner'],
- entry_points={'gui_scripts': ['openlp = run_openlp:start']}
+ entry_points={'gui_scripts': ['openlp = openlp.__main__:start']}
)