aboutsummaryrefslogtreecommitdiffstats
path: root/setuptools/launch.py
diff options
context:
space:
mode:
authorJason R. Coombs <jaraco@jaraco.com>2016-01-25 21:15:02 -0500
committerJason R. Coombs <jaraco@jaraco.com>2016-01-25 21:15:02 -0500
commit634b0aefca69d135dd5226a44fac4c44a47c328d (patch)
treee48f398e3ba06ba05f3d1b55f28a1961b28a9aad /setuptools/launch.py
parentbdd0e2d6a9bc38ae1c8b035364b7b23da0845233 (diff)
downloadexternal_python_setuptools-634b0aefca69d135dd5226a44fac4c44a47c328d.tar.gz
external_python_setuptools-634b0aefca69d135dd5226a44fac4c44a47c328d.tar.bz2
external_python_setuptools-634b0aefca69d135dd5226a44fac4c44a47c328d.zip
Rather than re-use globals of setuptools.launch, build a unique namespace in which to launch the script. Prevents imports from occuring relative to 'setuptools' on Python 2. Ref #490.
Diffstat (limited to 'setuptools/launch.py')
-rw-r--r--setuptools/launch.py19
1 files changed, 13 insertions, 6 deletions
diff --git a/setuptools/launch.py b/setuptools/launch.py
index 68cce681..06e15e1e 100644
--- a/setuptools/launch.py
+++ b/setuptools/launch.py
@@ -10,19 +10,26 @@ import tokenize
import sys
-def load():
+def run():
"""
- Load the script in sys.argv[1] and run it as if it had
+ Run the script in sys.argv[1] as if it had
been invoked naturally.
"""
- globals()['__file__'] = sys.argv[1]
+ __builtins__
+ script_name = sys.argv[1]
+ namespace = dict(
+ __file__ = script_name,
+ __name__ = '__main__',
+ __doc__ = None,
+ )
sys.argv[:] = sys.argv[1:]
open_ = getattr(tokenize, 'open', open)
- script = open_(__file__).read()
+ script = open_(script_name).read()
norm_script = script.replace('\\r\\n', '\\n')
- return compile(norm_script, __file__, 'exec')
+ code = compile(norm_script, script_name, 'exec')
+ exec(code, namespace)
if __name__ == '__main__':
- exec(load())
+ run()