Hmm... looks like you can't. If a file fails an os.path.isfile() check, sdist.py skips it and prints a warning. That's probably worth loosening. Creating directories makes sense, but I don't think we need to support symlinks or more exotic file types such as pipes.
Here are the necessary patches from my setup.py: from distutils.core import setup, Extension from distutils.command.sdist import sdist from distutils import dir_util from distutils.filelist import FileList, translate_pattern class ModifiedFileList(FileList): def findall(self, dir=os.curdir): from stat import ST_MODE, S_ISREG, S_ISDIR, S_ISLNK list = [] stack = [dir] pop = stack.pop push = stack.append while stack: dir = pop() names = os.listdir(dir) for name in names: if dir != os.curdir: # avoid the dreaded "./" syndrome fullname = os.path.join(dir, name) else: fullname = name stat = os.stat(fullname) mode = stat[ST_MODE] if S_ISREG(mode): list.append(fullname) elif S_ISDIR(mode) and not S_ISLNK(mode): list.append(fullname) push(fullname) self.allfiles = list class modified_sdist(sdist): def run (self): self.filelist = ModifiedFileList() self.check_metadata() self.get_file_list() if self.manifest_only: return self.make_distribution() def make_release_tree (self, base_dir, files): self.mkpath(base_dir) dir_util.create_tree(base_dir, files, verbose=self.verbose, dry_run=self.dry_run) if hasattr(os, 'link'): # can make hard links on this system link = 'hard' msg = "making hard links in %s..." % base_dir else: # nope, have to copy link = None msg = "copying files to %s..." % base_dir if not files: self.warn("no files to distribute -- empty manifest?") else: self.announce(msg) for file in files: if os.path.isfile(file): dest = os.path.join(base_dir, file) self.copy_file(file, dest, link=link) elif os.path.isdir(file): dir_util.mkpath(os.path.join(base_dir, file)) else: self.warn("'%s' not a regular file or directory -- skipping" % file) setup(... cmdclass = {'sdist': modified_sdist}) I am not too happy with this kind of patching, as I rely quite a bit on undocumented internals of Distutils, which might change in future versions. But for the moment I seem to have no other choice. Konrad. -- ------------------------------------------------------------------------------- Konrad Hinsen | E-Mail: hinsen@cnrs-orleans.fr Centre de Biophysique Moleculaire (CNRS) | Tel.: +33-2.38.25.56.24 Rue Charles Sadron | Fax: +33-2.38.63.15.17 45071 Orleans Cedex 2 | Deutsch/Esperanto/English/ France | Nederlands/Francais -------------------------------------------------------------------------------
participants (1)
-
Konrad Hinsen