Source code for problog.setup

"""
problog.setup - Installation tools
----------------------------------

Provides an installer for ProbLog dependencies.

..
    Part of the ProbLog distribution.

    Copyright 2015 KU Leuven, DTAI Research Group

    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
    You may obtain a copy of the License at

        http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
"""
import distutils.ccompiler
import distutils.spawn
import os
import sys


def get_system():
    system = sys.platform
    if system.lower().startswith("java"):
        import java.lang.System

        system = java.lang.System.getProperty("os.name").lower()
    if system.startswith("linux"):
        system = "linux"
    elif system.startswith("win"):
        system = "windows"
    elif system.startswith("mac"):
        system = "darwin"
    return system


[docs]def set_environment(): """Updates local PATH and PYTHONPATH to include additional component directories.""" # Set PATH environment path = os.environ.get("PATH", []) if path: path = [path] path = os.pathsep.join(path + list(get_binary_paths())) os.environ["PATH"] = path # Set PYTHONPATH environment sys.path += get_module_paths()
[docs]def get_binary_paths(): """Get a list of additional binary search paths.""" binary_root = os.path.join(os.path.dirname(__file__), "bin") system = get_system() # Darwin, Linux, ? return list(map(os.path.abspath, [os.path.join(binary_root, system), binary_root]))
[docs]def get_module_paths(): """Get a list of additional module search paths.""" binary_root = os.path.join(os.path.dirname(__file__), "lib") system = get_system() # Darwin, Linux, ? python = "python%s" % sys.version_info[0] return list( map( os.path.abspath, [ os.path.join(binary_root, python, system), os.path.join(binary_root, python), binary_root, ], ) )
[docs]def gather_info(): """Collect info about the system and its installed software.""" system_info = {} system_info["root_path"] = os.path.join(os.path.dirname(__file__), "..") system_info["os"] = get_system() # system_info['arch'] = os.uname()[-1] system_info["python_version"] = sys.version_info # Module pyparsing try: import pyparsing system_info["pyparsing"] = pyparsing.__version__ except ImportError: pass # SDD module # noinspection PyBroadException try: import pysdd system_info["sdd_module"] = True except Exception: pass # DSharp system_info["dsharp"] = distutils.spawn.find_executable("dsharp") is not None # c2d system_info["c2d"] = distutils.spawn.find_executable("cnf2dDNNF") is not None return system_info
def build_maxsatz(): if get_system() == "windows": return # We include the binary compiler = distutils.ccompiler.new_compiler() dest_dir, source_dir = get_binary_paths() source_dir = os.path.join(source_dir, "source", "maxsatz") source_file = "maxsatz2009.c" with WorkingDir(source_dir): objfile = compiler.compile([source_file], output_dir=dest_dir) compiler.link_executable(objfile, os.path.join(dest_dir, "maxsatz")) os.remove(objfile[0]) def install(force=True): info = gather_info() build_maxsatz() return info def system_info(): info = gather_info() ok = True s = "System information:\n" s += "------------------:\n" s += "Operating system: %s\n" % info.get("os", "unknown") s += "System architecture: %s\n" % info.get("arch", "unknown") s += "Python version: %s.%s.%s\n" % ( info["python_version"].major, info["python_version"].minor, info["python_version"].micro, ) s += "\n" s += "ProbLog components:\n" s += "-------------------\n" # PrologFile, PrologString => require pyparsing # SDD => requires sdd_library # NNF => requires dsharp or c2d # SemiringOther => requires NNF (or SDD with alternative evaluation) # pyparsing = info.get('pyparsing', 'NOT INSTALLED') # s += 'Module \'pyparsing\': %s\n' % pyparsing # if not pyparsing : # s += ' ACTION: install the pyparsing module\n' # sdd = info.get('sdd_module', False) # if sdd : # s += 'Module \'sdd\': INSTALLED\n' # else : # s += 'Module \'sdd\': NOT INSTALLED\n' # s += ' ACTION: run ProbLog installer\n' # return s class WorkingDir(object): def __init__(self, workdir): self.workdir = workdir self.currentdir = os.path.abspath(os.curdir) def __enter__(self): self.currentdir = os.path.abspath(os.curdir) os.chdir(self.workdir) def __exit__(self, *args): os.chdir(self.currentdir) if __name__ == "__main__": set_environment() info = install() print(info)