Path: blob/main/test/lib/python3.9/site-packages/setuptools/command/install_scripts.py
4799 views
from distutils import log1import distutils.command.install_scripts as orig2from distutils.errors import DistutilsModuleError3import os4import sys56from pkg_resources import Distribution, PathMetadata7from .._path import ensure_directory8910class install_scripts(orig.install_scripts):11"""Do normal script install, plus any egg_info wrapper scripts"""1213def initialize_options(self):14orig.install_scripts.initialize_options(self)15self.no_ep = False1617def run(self):18import setuptools.command.easy_install as ei1920self.run_command("egg_info")21if self.distribution.scripts:22orig.install_scripts.run(self) # run first to set up self.outfiles23else:24self.outfiles = []25if self.no_ep:26# don't install entry point scripts into .egg file!27return2829ei_cmd = self.get_finalized_command("egg_info")30dist = Distribution(31ei_cmd.egg_base, PathMetadata(ei_cmd.egg_base, ei_cmd.egg_info),32ei_cmd.egg_name, ei_cmd.egg_version,33)34bs_cmd = self.get_finalized_command('build_scripts')35exec_param = getattr(bs_cmd, 'executable', None)36try:37bw_cmd = self.get_finalized_command("bdist_wininst")38is_wininst = getattr(bw_cmd, '_is_running', False)39except (ImportError, DistutilsModuleError):40is_wininst = False41writer = ei.ScriptWriter42if is_wininst:43exec_param = "python.exe"44writer = ei.WindowsScriptWriter45if exec_param == sys.executable:46# In case the path to the Python executable contains a space, wrap47# it so it's not split up.48exec_param = [exec_param]49# resolve the writer to the environment50writer = writer.best()51cmd = writer.command_spec_class.best().from_param(exec_param)52for args in writer.get_args(dist, cmd.as_header()):53self.write_script(*args)5455def write_script(self, script_name, contents, mode="t", *ignored):56"""Write an executable file to the scripts directory"""57from setuptools.command.easy_install import chmod, current_umask5859log.info("Installing %s script to %s", script_name, self.install_dir)60target = os.path.join(self.install_dir, script_name)61self.outfiles.append(target)6263mask = current_umask()64if not self.dry_run:65ensure_directory(target)66f = open(target, "w" + mode)67f.write(contents)68f.close()69chmod(target, 0o777 - mask)707172