summaryrefslogtreecommitdiffstats
path: root/ptpython/entry_points/run_ptipython.py
diff options
context:
space:
mode:
Diffstat (limited to 'ptpython/entry_points/run_ptipython.py')
-rw-r--r--ptpython/entry_points/run_ptipython.py80
1 files changed, 80 insertions, 0 deletions
diff --git a/ptpython/entry_points/run_ptipython.py b/ptpython/entry_points/run_ptipython.py
new file mode 100644
index 0000000..650633e
--- /dev/null
+++ b/ptpython/entry_points/run_ptipython.py
@@ -0,0 +1,80 @@
+#!/usr/bin/env python
+import os
+import sys
+
+from .run_ptpython import create_parser, get_config_and_history_file
+
+
+def run(user_ns=None):
+ a = create_parser().parse_args()
+
+ config_file, history_file = get_config_and_history_file(a)
+
+ # If IPython is not available, show message and exit here with error status
+ # code.
+ try:
+ import IPython
+ except ImportError:
+ print("IPython not found. Please install IPython (pip install ipython).")
+ sys.exit(1)
+ else:
+ from ptpython.ipython import embed
+ from ptpython.repl import enable_deprecation_warnings, run_config
+
+ # Add the current directory to `sys.path`.
+ if sys.path[0] != "":
+ sys.path.insert(0, "")
+
+ # When a file has been given, run that, otherwise start the shell.
+ if a.args and not a.interactive:
+ sys.argv = a.args
+ path = a.args[0]
+ with open(path, "rb") as f:
+ code = compile(f.read(), path, "exec")
+ exec(code, {})
+ else:
+ enable_deprecation_warnings()
+
+ # Create an empty namespace for this interactive shell. (If we don't do
+ # that, all the variables from this function will become available in
+ # the IPython shell.)
+ if user_ns is None:
+ user_ns = {}
+
+ # Startup path
+ startup_paths = []
+ if "PYTHONSTARTUP" in os.environ:
+ startup_paths.append(os.environ["PYTHONSTARTUP"])
+
+ # --interactive
+ if a.interactive:
+ startup_paths.append(a.args[0])
+ sys.argv = a.args
+
+ # exec scripts from startup paths
+ for path in startup_paths:
+ if os.path.exists(path):
+ with open(path, "rb") as f:
+ code = compile(f.read(), path, "exec")
+ exec(code, user_ns, user_ns)
+ else:
+ print("File not found: {}\n\n".format(path))
+ sys.exit(1)
+
+ # Apply config file
+ def configure(repl):
+ if os.path.exists(config_file):
+ run_config(repl, config_file)
+
+ # Run interactive shell.
+ embed(
+ vi_mode=a.vi,
+ history_filename=history_file,
+ configure=configure,
+ user_ns=user_ns,
+ title="IPython REPL (ptipython)",
+ )
+
+
+if __name__ == "__main__":
+ run()