-
Notifications
You must be signed in to change notification settings - Fork 39
/
Copy pathcomplete_install.py
131 lines (104 loc) · 4.95 KB
/
complete_install.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
import os
import errno
import argparse
from subprocess import call
HOME_DIR = os.environ.get('HOME')
def install_pysimm(prefix):
os.chdir(prefix)
if os.path.isdir('pysimm'):
print('pysimm directory already exists...assuming it is the pysimm repository and continuing...')
else:
call('git clone https://github.com/polysimtools/pysimm', shell=True)
if not os.path.isfile('pysimm/complete_install.py'):
print('assumption about pysimm repository existing was wrong; exiting...')
exit()
# Syncronising envirnomental variables
if os.environ['PATH'].find('/pysimm/') > 0:
args = os.environ['PATH'].split(':')
args_list = [t.find('pysimm') > 0 for t in args]
if True in args_list:
old_path = args[args_list.index(True)][:-4]
print('Found earlier pysimm installation in {:}\n Will now remove this istance from '
'the $PATH and write new configuration'.format(old_path))
with open(os.path.join(HOME_DIR, '.bashrc'), 'r') as pntr:
stream = pntr.read()
lines = stream.split('\n')
tmp = []
for l in lines:
if not l.find(old_path) > 0:
tmp.append(l + '\n')
tmp.append('\n')
with open(os.path.join(HOME_DIR, '.bashrc'), 'w') as pntr:
for l in tmp:
pntr.write(l)
call("echo export PYTHONPATH='$PYTHONPATH':{} >> {}".format(os.path.join(prefix, 'pysimm'),
os.path.join(HOME_DIR, '.bashrc')), shell=True)
call("echo export PATH='$PATH':{} >> {}".format(os.path.join(prefix, 'pysimm', 'bin'),
os.path.join(HOME_DIR, '.bashrc')), shell=True)
print('done installing pysimm')
def apt_update():
call('apt-get update', shell=True)
def apt_install(*packages):
call('apt-get -y install {}'.format(' '.join(packages)), shell=True)
def install_lammps(prefix, *packages):
os.chdir(prefix)
call('git clone -b release https://github.com/lammps/lammps.git lammps', shell=True)
os.chdir(os.path.join(prefix,'lammps'))
call('git checkout -b branch_738f155 738f155', shell=True)
os.chdir(os.path.join(prefix,'lammps','src'))
for package in packages:
call('make yes-{}'.format(package), shell=True)
call('make mpi', shell=True)
call("echo export PATH='$PATH':{} >> {}".format(os.path.join(prefix, 'lammps', 'src'),
os.path.join(HOME_DIR,'.bashrc')),
shell=True)
call("echo export LAMMPS_EXEC={} >> {}".format(os.path.join(prefix, 'lammps', 'src', 'lmp_mpi'),
os.path.join(HOME_DIR,'.bashrc')),
shell=True)
def install_ambertools(dir_):
os.chdir(dir_)
call("echo export AMBERHOME={} >> {}".format(dir_, os.path.join(HOME_DIR,'.bashrc')),
shell=True)
os.environ['AMBERHOME'] = dir_
call('./configure gnu', shell=True)
call('make install', shell=True)
call("echo export ANTECHAMBER_EXEC={} >> {}".format(os.path.join(dir_, 'bin', 'antechamber'),
os.path.join(HOME_DIR,'.bashrc')),
shell=True)
def parse_args():
parser = argparse.ArgumentParser()
parser.add_argument('--apt-update', dest='apt_update', action='store_true', default=False)
parser.add_argument('--apt-install', dest='apt_install', action='store_true', default=False)
parser.add_argument('--pysimm', dest='pysimm_prefix', default=HOME_DIR)
parser.add_argument('--lammps', dest='lammps_prefix', default=None)
parser.add_argument('--lammps-packages', dest='lammps_packages', nargs='*',
default=['class2', 'extra-molecule', 'kspace', 'manybody', 'misc', 'molecule', 'qeq'])
parser.add_argument('--amber-tools', dest='ambertools_dir', default=None)
return parser.parse_args()
def mkdir_p(path):
try:
os.makedirs(path)
except OSError as exc:
if exc.errno == errno.EEXIST and os.path.isdir(path):
pass
else:
raise
if __name__ == '__main__':
args = parse_args()
if bool(args.apt_update):
apt_update()
if args.pysimm_prefix:
if args.apt_install:
apt_install('git', 'python-numpy', 'python-matplotlib')
mkdir_p(args.pysimm_prefix)
install_pysimm(args.pysimm_prefix)
if args.lammps_prefix:
if args.apt_install:
apt_install('make git g++', 'libopenmpi-dev', 'openmpi-bin')
mkdir_p(args.lammps_prefix)
install_lammps(args.lammps_prefix, *args.lammps_packages)
if args.ambertools_dir:
if args.apt_install:
apt_install('make', 'csh', 'gfortran', 'libopenmpi-dev', 'openmpi-bin', 'xorg-dev', 'xserver-xorg')
install_ambertools(args.ambertools_dir)
os.chdir(HOME_DIR)