From f4f427681507371f70ef904a248420ef15dba2a8 Mon Sep 17 00:00:00 2001 From: "Kurt B. Kaiser" Date: Tue, 24 Dec 2002 06:36:19 +0000 Subject: [PATCH] M PyShell.py M idle M idle.py M idle.pyw M setup.py Switch back to installing IDLE as a package. The IDLE GUI and the subprocess will both attempt to start up via the package mechanism, but if IDLE is not yet installed it is possible to run by calling python idle.py in the IDLE source directory, or to add the source directory to sys.path. One advantage of doing it this way is IDLE stays off sys.path. Developed in collaboration with Tony Lownds. --- Lib/idlelib/PyShell.py | 12 +++++++++--- Lib/idlelib/idle | 9 +++++++-- Lib/idlelib/idle.py | 9 +++++++-- Lib/idlelib/idle.pyw | 9 +++++++-- Lib/idlelib/setup.py | 11 +++++------ 5 files changed, 35 insertions(+), 15 deletions(-) diff --git a/Lib/idlelib/PyShell.py b/Lib/idlelib/PyShell.py index e3605ac8681..687b5397ad3 100644 --- a/Lib/idlelib/PyShell.py +++ b/Lib/idlelib/PyShell.py @@ -319,9 +319,15 @@ def build_subprocess_arglist(self): # XXX what about warnoptions? return [sys.executable, '-p', str(self.port)] else: - w = ['-W' + s for s in sys.warnoptions] - return [sys.executable] + w \ - + ["-c", "__import__('run').main()", str(self.port)] + w = ['-W' + s for s in sys.warnoptions] + # Maybe IDLE is installed and is being accessed via sys.path, + # or maybe it's not installed and the idle.py script is being + # run from the IDLE source directory. + if __name__ == 'idlelib.PyShell': + command = "__import__('idlelib.run').run.main()" + else: + command = "__import__('run').main()" + return [sys.executable] + w + ["-c", command, str(self.port)] def start_subprocess(self): addr = ("localhost", self.port) diff --git a/Lib/idlelib/idle b/Lib/idlelib/idle index 8638a165b4b..131e8d3694a 100755 --- a/Lib/idlelib/idle +++ b/Lib/idlelib/idle @@ -1,4 +1,9 @@ #! /usr/bin/env python -import PyShell -PyShell.main() +try: + import idlelib.PyShell + idlelib.PyShell.main() +except: + # IDLE is not installed, but maybe PyShell is on sys.path: + import PyShell + PyShell.main() diff --git a/Lib/idlelib/idle.py b/Lib/idlelib/idle.py index 8638a165b4b..131e8d3694a 100644 --- a/Lib/idlelib/idle.py +++ b/Lib/idlelib/idle.py @@ -1,4 +1,9 @@ #! /usr/bin/env python -import PyShell -PyShell.main() +try: + import idlelib.PyShell + idlelib.PyShell.main() +except: + # IDLE is not installed, but maybe PyShell is on sys.path: + import PyShell + PyShell.main() diff --git a/Lib/idlelib/idle.pyw b/Lib/idlelib/idle.pyw index 8638a165b4b..131e8d3694a 100644 --- a/Lib/idlelib/idle.pyw +++ b/Lib/idlelib/idle.pyw @@ -1,4 +1,9 @@ #! /usr/bin/env python -import PyShell -PyShell.main() +try: + import idlelib.PyShell + idlelib.PyShell.main() +except: + # IDLE is not installed, but maybe PyShell is on sys.path: + import PyShell + PyShell.main() diff --git a/Lib/idlelib/setup.py b/Lib/idlelib/setup.py index 8a4ffa69bac..e10b3e8c55c 100644 --- a/Lib/idlelib/setup.py +++ b/Lib/idlelib/setup.py @@ -46,14 +46,14 @@ def run(self): # Copies all .py files, then also copies the txt and gif files build_py.run(self) for name in txt_files: - outfile = self.get_plain_outfile(self.build_lib, [], name) + outfile = self.get_plain_outfile(self.build_lib, [pkgname], name) dir = os.path.dirname(outfile) self.mkpath(dir) self.copy_file(os.path.join(pkg_dir, name), outfile, preserve_mode = 0) for name in Icons: outfile = self.get_plain_outfile(self.build_lib, - ["Icons"], name) + [pkgname, "Icons"], name) dir = os.path.dirname(outfile) self.mkpath(dir) self.copy_file(os.path.join("Icons", name), @@ -71,11 +71,11 @@ def get_outputs(self, include_bytecode=1): if not include_bytecode: return outputs for name in txt_files: - filename = self.get_plain_outfile(self.build_lib, [], name) + filename = self.get_plain_outfile(self.build_lib, [pkgname], name) outputs.append(filename) for name in Icons: filename = self.get_plain_outfile(self.build_lib, - ["Icons"], name) + [pkgname, "Icons"], name) outputs.append(filename) return outputs @@ -111,7 +111,6 @@ def _bytecode_filenames(self, files): cmdclass = {'build_py':IDLE_Builder, 'install_lib':IDLE_Installer}, package_dir = {pkgname: pkg_dir}, - extra_path = pkgname, - py_modules = [f.split('.')[0] for f in glob.glob("*.py")], + packages = [pkgname], scripts = [os.path.join(pkg_dir, idle_name)] )