Skip to content

Commit 66ee6c8

Browse files
committed
Merge pull request #53 from stonebig/master
Various change to adapt to Ipython3.0
2 parents bf94f35 + 164c615 commit 66ee6c8

File tree

3 files changed

+59
-13
lines changed

3 files changed

+59
-13
lines changed

make.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,11 @@ def get_tool_path(relpath, checkfunc):
174174
rver = utils.get_r_version(rpath)
175175
installed_tools += [('R', rver)]
176176

177+
juliapath = get_tool_path(self.JULIA_PATH, osp.isdir)
178+
if juliapath is not None:
179+
juliaver = utils.get_julia_version(juliapath)
180+
installed_tools += [('Julia', juliaver)]
181+
177182
tools = []
178183
for name, ver in installed_tools:
179184
metadata = wppm.get_package_metadata('tools.ini', name)
@@ -903,6 +908,24 @@ def _create_batch_scripts(self):
903908

904909
self._print_done()
905910

911+
def _run_complement_batch_scripts(self):
912+
""" tools\..\run_complement.bat for final complements"""
913+
print('now run_complement.bat in tooldirs\..')
914+
for post_complement in list(set([osp.dirname(s)
915+
for s in self._toolsdirs])):
916+
filepath = osp.join(post_complement, "run_complement.bat")
917+
if osp.isfile(filepath):
918+
print('launch "%s" for "%s"' % (filepath, self.winpydir))
919+
try:
920+
retcode = subprocess.call('"%s" "%s"' % (filepath, self.winpydir),
921+
shell=True, stdout=sys.stderr)
922+
if retcode < 0:
923+
print("Child was terminated by signal", -retcode, file=sys.stderr)
924+
except OSError as e:
925+
print("Execution failed:", e, file=sys.stderr)
926+
927+
self._print_done()
928+
906929
def make(self, remove_existing=True):
907930
"""Make WinPython distribution in target directory from the installers
908931
located in wheeldir
@@ -957,6 +980,7 @@ def make(self, remove_existing=True):
957980
if not self.simulation:
958981
self._create_launchers()
959982
self._create_batch_scripts()
983+
self._run_complement_batch_scripts()
960984

961985
if remove_existing and not self.simulation:
962986
self._print("Cleaning up distribution")
@@ -1131,3 +1155,5 @@ def make_all(build_number, release_level, pyver,
11311155
# verbose=False, archis=(32, ), flavor='FlavorRfull')
11321156
#make_all(5, '', pyver='3.4', rootdir=r'D:\Winpython',
11331157
# verbose=False, archis=(64, ), flavor='FlavorRfull')
1158+
#make_all(5, '', pyver='3.4', rootdir=r'D:\Winpython',
1159+
# verbose=False, archis=(32, ), flavor='FlavorJulia')

winpython/utils.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -237,11 +237,17 @@ def get_gcc_version(path):
237237
"""Return version of the GCC compiler installed in *path*"""
238238
return exec_shell_cmd('gcc --version', path).splitlines()[0].split()[-1]
239239

240+
240241
def get_r_version(path):
241242
"""Return version of the R installed in *path*"""
242243
return exec_shell_cmd('dir ..\README.R*', path).splitlines()[-3].split("-")[-1]
243244

244245

246+
def get_julia_version(path):
247+
"""Return version of the Julia installed in *path*"""
248+
return exec_shell_cmd('julia.exe -v', path).splitlines()[0].split(" ")[-1]
249+
250+
245251
def get_thg_version(path):
246252
"""Return version of TortoiseHg installed in *path*"""
247253
txt = exec_shell_cmd('thg version', path).splitlines()[0]
@@ -306,6 +312,23 @@ def patch_shebang_line(fname, pad=b' '):
306312
print("failed to patch", fname)
307313

308314

315+
# =============================================================================
316+
# Patch sourcefile (instead of forking packages)
317+
# =============================================================================
318+
def patch_sourcefile(fname, in_text, out_text, silent_mode=False):
319+
"""Replace a string in a source file"""
320+
import io
321+
if osp.isfile(fname) and not in_text == out_text:
322+
with io.open(fname, 'r') as fh:
323+
content = fh.read()
324+
new_content = content.replace(in_text, out_text)
325+
if not new_content == content:
326+
if not silent_mode:
327+
print("patching " , fname, "from", in_text, "to", out_text)
328+
with io.open(fname, 'wt') as fh:
329+
fh.write(new_content)
330+
331+
309332
# =============================================================================
310333
# Extract functions
311334
# =============================================================================

winpython/wppm.py

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -390,20 +390,17 @@ def install(self, package, install_options=None):
390390
import glob
391391
for ffname in glob.glob(r'%s\Scripts\*.exe' % self.target):
392392
utils.patch_shebang_line(ffname)
393-
do_replace = self.target + (r"\Lib\site-packages\pip\_vendor" +
394-
r"\distlib\scripts.py" )
395-
print("do_replace" , do_replace)
396-
fh = open(do_replace,"r")
397-
the_thing = fh.read()
398-
fh.close()
399-
the_thing_after = the_thing.replace(
393+
utils.patch_sourcefile(
394+
self.target + (
395+
r"\Lib\site-packages\pip\_vendor\distlib\scripts.py"),
400396
" executable = get_executable()",
401-
" executable = os.path.join(os.path.basename(get_executable()))")
402-
if not the_thing_after == the_thing:
403-
print("do_replace_ok" , do_replace)
404-
fh = open(do_replace,"w")
405-
fh.write(the_thing_after)
406-
fh.close()
397+
" executable = os.path.join(os.path.basename(get_executable()))")
398+
# We patch IPython\kernel\kernelspec.py live (around line 51) !!!!
399+
if package.name == "ipython":
400+
utils.patch_sourcefile(
401+
self.target + r"\Lib\site-packages\IPython\kernel\kernelspec.py",
402+
r" kernel_dict = json.load(f)",
403+
r" kernel_dict = json.loads(('\n'.join(f.readlines())).replace('[WINPYDIR]',(os.environ['WINPYDIR']).replace('\\','\\\\')))")
407404

408405
def handle_specific_packages(self, package):
409406
"""Packages requiring additional configuration"""

0 commit comments

Comments
 (0)