Commit cd61e4ff9d0089e037ef4f1b1c6f23d8562ea722

Authored by decalage2
1 parent 458e9119

olevba: fixed absolute imports

Showing 1 changed file with 22 additions and 7 deletions
oletools/olevba.py
... ... @@ -190,8 +190,9 @@ from __future__ import print_function
190 190 # 2016-11-03 v0.51 PL: - added EnumDateFormats and EnumSystemLanguageGroupsW
191 191 # 2017-02-07 PL: - temporary fix for issue #132
192 192 # - added keywords for Mac-specific macros (issue #130)
  193 +# 2017-03-08 PL: - fixed absolute imports
193 194  
194   -__version__ = '0.51dev1'
  195 +__version__ = '0.51dev2'
195 196  
196 197 #------------------------------------------------------------------------------
197 198 # TODO:
... ... @@ -225,7 +226,9 @@ __version__ = '0.51dev1'
225 226  
226 227 #--- IMPORTS ------------------------------------------------------------------
227 228  
228   -import sys, logging
  229 +import sys
  230 +import os
  231 +import logging
229 232 import struct
230 233 import cStringIO
231 234 import math
... ... @@ -256,15 +259,26 @@ except ImportError:
256 259 + "see http://codespeak.net/lxml " \
257 260 + "or http://effbot.org/zone/element-index.htm")
258 261  
259   -from .thirdparty import olefile
260   -from .thirdparty.prettytable import prettytable
261   -from .thirdparty.xglob import xglob, PathNotFoundException
262   -from .thirdparty.pyparsing.pyparsing import \
  262 +# IMPORTANT: it should be possible to run oletools directly as scripts
  263 +# in any directory without installing them with pip or setup.py.
  264 +# In that case, relative imports are NOT usable.
  265 +# And to enable Python 2+3 compatibility, we need to use absolute imports,
  266 +# so we add the oletools parent folder to sys.path (absolute+normalized path):
  267 +_thismodule_dir = os.path.normpath(os.path.abspath(os.path.dirname(__file__)))
  268 +# print('_thismodule_dir = %r' % _thismodule_dir)
  269 +_parent_dir = os.path.normpath(os.path.join(_thismodule_dir, '..'))
  270 +# print('_parent_dir = %r' % _thirdparty_dir)
  271 +if not _parent_dir in sys.path:
  272 + pass #sys.path.insert(0, _parent_dir)
  273 +from oletools.thirdparty import olefile
  274 +from oletools.thirdparty.prettytable import prettytable
  275 +from oletools.thirdparty.xglob import xglob, PathNotFoundException
  276 +from oletools.thirdparty.pyparsing.pyparsing import \
263 277 CaselessKeyword, CaselessLiteral, Combine, Forward, Literal, \
264 278 Optional, QuotedString,Regex, Suppress, Word, WordStart, \
265 279 alphanums, alphas, hexnums,nums, opAssoc, srange, \
266 280 infixNotation, ParserElement
267   -from . import ppt_parser
  281 +from oletools import ppt_parser
268 282  
269 283  
270 284 # monkeypatch email to fix issue #32:
... ... @@ -3275,6 +3289,7 @@ def main():
3275 3289  
3276 3290 # Print help if no arguments are passed
3277 3291 if len(args) == 0:
  3292 + print('olevba %s - http://decalage.info/python/oletools' % __version__)
3278 3293 print(__doc__)
3279 3294 parser.print_help()
3280 3295 sys.exit(RETURN_WRONG_ARGS)
... ...