Commit d8d794437830d0cfb38e4898b70cde734cd4f6fb

Authored by decalage2
1 parent 54ca41c8

oleid: fixed absolute imports (issue #141)

Showing 1 changed file with 16 additions and 14 deletions
oletools/oleid.py
@@ -18,7 +18,7 @@ http://www.decalage.info/python/oletools @@ -18,7 +18,7 @@ http://www.decalage.info/python/oletools
18 18
19 #=== LICENSE ================================================================= 19 #=== LICENSE =================================================================
20 20
21 -# oleid is copyright (c) 2012-2016, Philippe Lagadec (http://www.decalage.info) 21 +# oleid is copyright (c) 2012-2017, Philippe Lagadec (http://www.decalage.info)
22 # All rights reserved. 22 # All rights reserved.
23 # 23 #
24 # Redistribution and use in source and binary forms, with or without modification, 24 # Redistribution and use in source and binary forms, with or without modification,
@@ -53,6 +53,7 @@ from __future__ import print_function @@ -53,6 +53,7 @@ from __future__ import print_function
53 # 2014-11-30 v0.03 PL: - improved output with prettytable 53 # 2014-11-30 v0.03 PL: - improved output with prettytable
54 # 2016-10-25 v0.50 PL: - fixed print and bytes strings for Python 3 54 # 2016-10-25 v0.50 PL: - fixed print and bytes strings for Python 3
55 # 2016-12-12 v0.51 PL: - fixed relative imports for Python 3 (issue #115) 55 # 2016-12-12 v0.51 PL: - fixed relative imports for Python 3 (issue #115)
  56 +# 2017-04-26 PL: - fixed absolute imports (issue #141)
56 57
57 __version__ = '0.51' 58 __version__ = '0.51'
58 59
@@ -77,19 +78,20 @@ __version__ = '0.51' @@ -77,19 +78,20 @@ __version__ = '0.51'
77 78
78 import optparse, sys, os, re, zlib, struct 79 import optparse, sys, os, re, zlib, struct
79 80
80 -try:  
81 - # Relative imports (only works when imported from package):  
82 - from .thirdparty import olefile  
83 - from .thirdparty.prettytable import prettytable  
84 -except:  
85 - # if it does not work, fall back to absolute imports:  
86 - # add this module's folder to sys.path (absolute+normalized path):  
87 - _thismodule_dir = os.path.normpath(os.path.abspath(os.path.dirname(__file__)))  
88 - if not _thismodule_dir in sys.path:  
89 - sys.path.insert(0, _thismodule_dir)  
90 - # absolute imports:  
91 - from thirdparty import olefile  
92 - from thirdparty.prettytable import prettytable 81 +# IMPORTANT: it should be possible to run oletools directly as scripts
  82 +# in any directory without installing them with pip or setup.py.
  83 +# In that case, relative imports are NOT usable.
  84 +# And to enable Python 2+3 compatibility, we need to use absolute imports,
  85 +# so we add the oletools parent folder to sys.path (absolute+normalized path):
  86 +_thismodule_dir = os.path.normpath(os.path.abspath(os.path.dirname(__file__)))
  87 +# print('_thismodule_dir = %r' % _thismodule_dir)
  88 +_parent_dir = os.path.normpath(os.path.join(_thismodule_dir, '..'))
  89 +# print('_parent_dir = %r' % _thirdparty_dir)
  90 +if not _parent_dir in sys.path:
  91 + sys.path.insert(0, _parent_dir)
  92 +
  93 +from oletools.thirdparty import olefile
  94 +from oletools.thirdparty.prettytable import prettytable
93 95
94 96
95 97