source: sasview/run.py @ 7c105e8

ESS_GUIESS_GUI_DocsESS_GUI_batch_fittingESS_GUI_bumps_abstractionESS_GUI_iss1116ESS_GUI_iss879ESS_GUI_iss959ESS_GUI_openclESS_GUI_orderingESS_GUI_sync_sascalcmagnetic_scattrelease-4.2.2ticket-1009ticket-1094-headlessticket-1242-2d-resolutionticket-1243ticket-1249ticket885unittest-saveload
Last change on this file since 7c105e8 was 7c105e8, checked in by Paul Kienzle <pkienzle@…>, 7 years ago

make run.py work again

  • Property mode set to 100755
File size: 5.5 KB
Line 
1# -*- coding: utf-8 -*-
2#!/usr/bin/env python
3
4"""
5Run sasview in place.  This allows sasview to use the python
6files in the source tree without having to call setup.py install
7first.  A rebuild is still necessary when working on sas models
8or c modules.
9
10Usage:
11
12./run.py [(module|script) args...]
13
14Without arguments run.py runs sasview.  With arguments, run.py will run
15the given module or script.
16"""
17
18import imp
19import os
20import sys
21from contextlib import contextmanager
22from os.path import join as joinpath
23from os.path import abspath, dirname
24
25
26def addpath(path):
27    """
28    Add a directory to the python path environment, and to the PYTHONPATH
29    environment variable for subprocesses.
30    """
31    path = abspath(path)
32    if 'PYTHONPATH' in os.environ:
33        PYTHONPATH = path + os.pathsep + os.environ['PYTHONPATH']
34    else:
35        PYTHONPATH = path
36    os.environ['PYTHONPATH'] = PYTHONPATH
37    sys.path.insert(0, path)
38
39
40@contextmanager
41def cd(path):
42    """
43    Change directory for duration of "with" context.
44    """
45    old_dir = os.getcwd()
46    os.chdir(path)
47    yield
48    os.chdir(old_dir)
49
50
51def import_package(modname, path):
52    """Import a package into a particular point in the python namespace"""
53    mod = imp.load_source(modname, abspath(joinpath(path, '__init__.py')))
54    sys.modules[modname] = mod
55    mod.__path__ = [abspath(path)]
56    return mod
57
58
59def import_dll(modname, build_path):
60    """Import a DLL from the build directory"""
61    import sysconfig
62    ext = sysconfig.get_config_var('SO')
63    # build_path comes from context
64    path = joinpath(build_path, *modname.split('.')) + ext
65    # print "importing", modname, "from", path
66    return imp.load_dynamic(modname, path)
67
68
69def prepare():
70    # Don't create *.pyc files
71    sys.dont_write_bytecode = True
72
73    # Debug numpy warnings
74    #import numpy; numpy.seterr(all='raise')
75
76    # find the directories for the source and build
77    from distutils.util import get_platform
78    root = abspath(dirname(__file__))
79    platform = '%s-%s' % (get_platform(), sys.version[:3])
80    build_path = joinpath(root, 'build', 'lib.' + platform)
81
82    # Notify the help menu that the Sphinx documentation is in a different
83    # place than it otherwise would be.
84    os.environ['SASVIEW_DOC_PATH'] = joinpath(build_path, "doc")
85
86    # Make sure that we have a private version of mplconfig
87    #mplconfig = joinpath(abspath(dirname(__file__)), '.mplconfig')
88    #os.environ['MPLCONFIGDIR'] = mplconfig
89    #if not os.path.exists(mplconfig): os.mkdir(mplconfig)
90    #import matplotlib
91    # matplotlib.use('Agg')
92    # print matplotlib.__file__
93    #import pylab; pylab.hold(False)
94    # add periodictable to the path
95    try:
96        import periodictable
97    except:
98        addpath(joinpath(root, '..', 'periodictable'))
99
100    try:
101        import bumps
102    except:
103        addpath(joinpath(root, '..', 'bumps'))
104
105    # select wx version
106    #addpath(os.path.join(root, '..','wxPython-src-3.0.0.0','wxPython'))
107
108    # Build project if the build directory does not already exist.
109    if not os.path.exists(build_path):
110        import subprocess
111        with cd(root):
112            subprocess.call((sys.executable, "setup.py", "build"), shell=False)
113
114    # Put the source trees on the path
115    addpath(joinpath(root, 'src'))
116
117    # sasmodels on the path
118    addpath(joinpath(root, '../sasmodels/'))
119
120    # The sas.models package Compiled Model files should be pulled in from the build directory even though
121    # the source is stored in src/sas/models.
122
123    # Compiled modules need to be pulled from the build directory.
124    # Some packages are not where they are needed, so load them explicitly.
125    import sas.sascalc.pr
126    sas.sascalc.pr.core = import_package('sas.sascalc.pr.core',
127                                         joinpath(build_path, 'sas', 'sascalc', 'pr', 'core'))
128
129    # Compiled modules need to be pulled from the build directory.
130    # Some packages are not where they are needed, so load them explicitly.
131    import sas.sascalc.file_converter
132    sas.sascalc.file_converter.core = import_package('sas.sascalc.file_converter.core',
133                                                     joinpath(build_path, 'sas', 'sascalc', 'file_converter', 'core'))
134
135    import sas.sascalc.calculator
136    sas.sascalc.calculator.core = import_package('sas.sascalc.calculator.core',
137                                                 joinpath(build_path, 'sas', 'sascalc', 'calculator', 'core'))
138
139    sys.path.append(build_path)
140
141    set_git_tag()
142    # print "\n".join(sys.path)
143
144def set_git_tag():
145    try:
146        import subprocess
147        import os
148        import platform
149        FNULL = open(os.devnull, 'w')
150        if platform.system() == "Windows":
151            args = ['git', 'describe', '--tags']
152        else:
153            args = ['git describe --tags']
154        git_revision = subprocess.check_output(args, stderr=FNULL, shell=True)
155        import sas.sasview
156        sas.sasview.__build__ = str(git_revision).strip()
157    except subprocess.CalledProcessError as cpe:
158        logger.warning("Error while determining build number\n  Using command:\n %s \n Output:\n %s"% (cpe.cmd,cpe.output))
159
160
161if __name__ == "__main__":
162    # Need to add absolute path before actual prepare call,
163    # so logging can be done during initialization process too
164    root = abspath(dirname(__file__))
165    addpath(joinpath(root, 'src'))
166    from sas.logger_config import SetupLogger
167    logger = SetupLogger(__name__).config_development()
168
169    logger.debug("Starting SASVIEW in debug mode.")
170    prepare()
171    from sas.sasview.sasview import run_gui
172    run_gui()
173    logger.debug("Ending SASVIEW in debug mode.")
Note: See TracBrowser for help on using the repository browser.