Hello,
However, I just realized a problem: we probably should have a "build_scripts" command, to ensure that the proper "#!" line is in the installed scripts. Do we have always Python scripts? What about shell scripts, and specifically Windows Batch scripts? See below for my current "Windows" hack in setup.py.
But I don't think we should rely on everyone using the "#!/usr/bin/env" hack, either: the first python on the path isn't necessarily the right one. The "first python on the path" is the correct thing for the user, otherwise the path is wrong. So "/usr/bin/env pyton" yields the correct interpreter to execute.
Bastian PS. Here is my Distribution class form setup.py for LinkChecker: # Autodetect the existence of an SSL library (this is pretty shitty) # Autodetect Windows platforms to include the linkchecker.bat script class LCDistribution(Distribution): default_include_dirs = ['/usr/include/openssl', '/usr/local/include/openssl'] def run_commands (self): self.check_ssl() self.check_windows() for cmd in self.commands: self.run_command (cmd) def check_ssl(self): incldir = self.has_ssl() if incldir: self.announce("SSL header file ssl.h found, " "enabling SSL compilation.") self.ext_modules = [('ssl', {'sources': ['ssl.c'], 'include_dirs': [incldir], 'library_dirs': ['/usr/lib'], 'libs': ['ssl']})] else: self.announce("SSL header file ssl.h missing, " "disabling SSL compilation.\n" "Use the -I option for the build_ext command.") def check_windows(self): if sys.platform=='win32': inst = self.find_command_obj("install") inst.ensure_ready() t = Template("linkchecker.bat.tmpl") f = open("linkchecker.bat","w") # replace "path_to_linkchecker" with install path f.write(t.fill_in({"path_to_linkchecker": inst.install_scripts})) f.close() self.scripts.append('linkchecker.bat') def has_ssl(self): incls = self.find_command_obj("build_ext").include_dirs incls = (incls and string.split(incls, os.pathsep)) or [] for d in incls + self.default_include_dirs: if os.path.exists(os.path.join(d, "ssl.h")): return d return 0