source: sasview/run.py @ f182f93

ESS_GUIESS_GUI_DocsESS_GUI_batch_fittingESS_GUI_bumps_abstractionESS_GUI_iss1116ESS_GUI_iss879ESS_GUI_iss959ESS_GUI_openclESS_GUI_orderingESS_GUI_sync_sascalc
Last change on this file since f182f93 was 31c5b58, checked in by Piotr Rozyczko <rozyczko@…>, 8 years ago

Refactored to allow running with run.py.
Minor fixes to plotting.

  • Property mode set to 100644
File size: 3.7 KB
Line 
1#!/usr/bin/env python
2"""
3Run sasview in place.  This allows sasview to use the python
4files in the source tree without having to call setup.py install
5first.  A rebuild is still necessary when working on sas models
6or c modules.
7
8Usage:
9
10./run.py [(module|script) args...]
11
12Without arguments run.py runs sasview.  With arguments, run.py will run
13the given module or script.
14"""
15
16import os
17import sys
18import imp
19from contextlib import contextmanager
20from os.path import abspath, dirname, join as joinpath
21
22
23def addpath(path):
24    """
25    Add a directory to the python path environment, and to the PYTHONPATH
26    environment variable for subprocesses.
27    """
28    path = abspath(path)
29    if 'PYTHONPATH' in os.environ:
30        PYTHONPATH = path + os.pathsep + os.environ['PYTHONPATH']
31    else:
32        PYTHONPATH = path
33    os.environ['PYTHONPATH'] = PYTHONPATH
34    sys.path.insert(0, path)
35
36@contextmanager
37def cd(path):
38    """
39    Change directory for duration of "with" context.
40    """
41    old_dir = os.getcwd()
42    os.chdir(path)
43    yield
44    os.chdir(old_dir)
45
46def import_package(modname, path):
47    """Import a package into a particular point in the python namespace"""
48    mod = imp.load_source(modname, abspath(joinpath(path,'__init__.py')))
49    sys.modules[modname] = mod
50    mod.__path__ = [abspath(path)]
51    return mod
52
53def import_dll(modname, build_path):
54    """Import a DLL from the build directory"""
55    import sysconfig
56    ext = sysconfig.get_config_var('SO')
57    # build_path comes from context
58    path = joinpath(build_path, *modname.split('.'))+ext
59    return imp.load_dynamic(modname, path)
60
61def prepare():
62    # Don't create *.pyc files
63    sys.dont_write_bytecode = True
64
65    # Debug numpy warnings
66    #import numpy; numpy.seterr(all='raise')
67
68    # find the directories for the source and build
69    from distutils.util import get_platform
70    root = abspath(dirname(__file__))
71    platform = '%s-%s'%(get_platform(),sys.version[:3])
72    build_path = joinpath(root, 'build','lib.'+platform)
73   
74    # Notify the help menu that the Sphinx documentation is in a different
75    # place than it otherwise would be.
76    os.environ['SASVIEW_DOC_PATH'] = joinpath(build_path, "doc")
77
78    # add periodictable to the path
79    try: import periodictable
80    except: addpath(joinpath(root, '..','periodictable'))
81
82    try: import bumps
83    except: addpath(joinpath(root, '..','bumps'))
84
85    # Build project if the build directory does not already exist.
86    if not os.path.exists(build_path):
87        import subprocess
88        with cd(root):
89            subprocess.call((sys.executable, "setup.py", "build"), shell=False)
90
91    # Put the source trees on the path
92    addpath(joinpath(root, 'src'))
93
94    # sasmodels on the path
95    addpath(joinpath(root, '../sasmodels/'))
96
97    # Import the sasview package from root/sasview as sas.sasview.  It would
98    # be better to just store the package in src/sas/sasview.
99    import sas
100    sas.sasview = import_package('sas.sasview', joinpath(root,'sasview'))
101
102    # Compiled modules need to be pulled from the build directory.
103    # Some packages are not where they are needed, so load them explicitly.
104    import sas.sascalc.pr
105    sas.sascalc.pr.core = import_package('sas.sascalc.pr.core',
106                                  joinpath(build_path, 'sas', 'sascalc', 'pr', 'core'))
107
108    # Compiled modules need to be pulled from the build directory.
109    # Some packages are not where they are needed, so load them explicitly.
110    import sas.sascalc.calculator
111    sas.sascalc.calculator.core = import_package('sas.sascalc.calculator.core',
112                                  joinpath(build_path, 'sas', 'sascalc', 'calculator', 'core'))
113
114    sys.path.append(build_path)
115
116if __name__ == "__main__":
117    prepare()
118    from sas.qtgui.MainWindow import run
119    run()
Note: See TracBrowser for help on using the repository browser.