source: sasview/run.py @ 5a2bb75

Last change on this file since 5a2bb75 was 328f2ef, checked in by Torin Cooper-Bennun <torin.cooper-bennun@…>, 6 years ago

use joinpath instead of slashes

  • Property mode set to 100644
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, realpath
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    #logger.debug("Dynamicly importing: %s", path)
54    mod = imp.load_source(modname, abspath(joinpath(path, '__init__.py')))
55    sys.modules[modname] = mod
56    mod.__path__ = [abspath(path)]
57    return mod
58
59
60def import_dll(modname, build_path):
61    """Import a DLL from the build directory"""
62    import sysconfig
63    ext = sysconfig.get_config_var('SO')
64    # build_path comes from context
65    path = joinpath(build_path, *modname.split('.')) + ext
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(sys.argv[0]))
79
80    platform = '%s-%s' % (get_platform(), sys.version[:3])
81    build_path = joinpath(root, 'build', 'lib.' + platform)
82
83    # Notify the help menu that the Sphinx documentation is in a different
84    # place than it otherwise would be.
85    os.environ['SASVIEW_DOC_PATH'] = joinpath(build_path, "doc")
86
87    # Make sure that we have a private version of mplconfig
88    #mplconfig = joinpath(abspath(dirname(__file__)), '.mplconfig')
89    #os.environ['MPLCONFIGDIR'] = mplconfig
90    #if not os.path.exists(mplconfig): os.mkdir(mplconfig)
91    #import matplotlib
92    # matplotlib.use('Agg')
93    # print matplotlib.__file__
94    #import pylab; pylab.hold(False)
95    # add periodictable to the path
96    try:
97        import periodictable
98    except:
99        addpath(joinpath(root, '..', 'periodictable'))
100
101    try:
102        import bumps
103    except:
104        addpath(joinpath(root, '..', 'bumps'))
105
106    # Build project if the build directory does not already exist.
107    if not os.path.exists(build_path):
108        import subprocess
109        with cd(root):
110            subprocess.call((sys.executable, "setup.py", "build"), shell=False)
111
112    # Put the source trees on the path
113    addpath(joinpath(root, 'src'))
114
115    # sasmodels on the path
116    addpath(joinpath(root, '../sasmodels/'))
117
118    # Import the sasview package from root/sasview as sas.sasview.  It would
119    # be better to just store the package in src/sas/sasview.
120    #import sas
121    #sas.sasview = import_package('sas.sasview', joinpath(root, 'src','sas','sasview'))
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    # Compiled modules need to be pulled from the build directory.
136    # Some packages are not where they are needed, so load them explicitly.
137    import sas.sascalc.calculator
138    sas.sascalc.calculator.core = import_package('sas.sascalc.calculator.core',
139                                  joinpath(build_path, 'sas', 'sascalc', 'calculator', 'core'))
140
141    sys.path.append(build_path)
142
143    # Run the UI conversion tool if executed from script
144    if os.path.splitext(sys.argv[0])[1].lower() == ".py":
145        import sas.qtgui.convertUI
146
147    # initialize OpenCL setting
148    SAS_OPENCL = sas.get_custom_config().SAS_OPENCL
149    if SAS_OPENCL and "SAS_OPENCL" not in os.environ:
150        os.environ["SAS_OPENCL"] = SAS_OPENCL
151
152
153if __name__ == "__main__":
154    # Need to add absolute path before actual prepare call,
155    # so logging can be done during initialization process too
156    root = abspath(dirname(realpath(sys.argv[0])))
157
158    addpath(joinpath(root, 'src'))
159    addpath(joinpath(root, joinpath('..', 'sasmodels'))) # dependency (for loading custom_config.py during log setup)
160
161    from sas.logger_config import SetupLogger
162    logger = SetupLogger(__name__).config_development()
163
164    logger.debug("Starting SASVIEW in debug mode.")
165    prepare()
166    from sas.qtgui.MainWindow.MainWindow import run_sasview
167    run_sasview()
168    logger.debug("Ending SASVIEW in debug mode.")
Note: See TracBrowser for help on using the repository browser.