| # Expects two env variables: | |
| # PYCHARM_ENGULF_SCRIPT = which script should be engulfed. | |
| # PYCHARM_PREPEND_SYSPATH = which entries should be added to the beginning of sys.path; | |
| # items must be separated by path separator. May be unset. | |
| # | |
| # Given script is loaded and compiled, then sys.path is prepended as requested. | |
| # On win32, getpass is changed to insecure but working version. | |
| # Then the compiled script evaluated, as if it were run by python interpreter itself. | |
| # Works OK with debugger. | |
| import os | |
| import sys | |
| target = os.getenv("PYCHARM_ENGULF_SCRIPT") | |
| print("Running script through buildout: " + target) | |
| assert target, "PYCHARM_ENGULF_SCRIPT must be set" | |
| filepath = os.path.abspath(target) | |
| f = None | |
| try: | |
| f = open(filepath, "r") | |
| source = "\n".join((s.rstrip() for s in f.readlines())) | |
| finally: | |
| if f: | |
| f.close() | |
| from fix_getpass import fixGetpass | |
| fixGetpass() | |
| #prependable = os.getenv("PYCHARM_PREPEND_SYSPATH") | |
| #if prependable: | |
| # sys.path[0:0] = [x for x in prependable.split(os.path.pathsep)] | |
| # include engulfed's path, everyone expects this | |
| our_path = os.path.dirname(filepath) | |
| if our_path not in sys.path: | |
| sys.path.append(our_path) | |
| compile(source, target, "exec") | |
| exec(source) | |
| # here we come |