How do you get data_files and bdist_wininst to cooperate?
![](https://secure.gravatar.com/avatar/d463dfc988b28fe71a1a0ac867ca2fb7.jpg?s=120&d=mm&r=g)
Hi folks, I'm very new to this list and to distutils (this is my first stab at using it), so don't be afraid to point out the obvious... I'm trying to make a setup.py that will work on Linux and Win32, and be able to produce sdists and bdists for both platforms (I understand that I should use the targeted platform to build the bdist). The package I'm trying to distribute is actually a Quixote application, which (for those unfamiliar with Quixote) means it's a web application. I'd like to install it as a package in site-packages anyway, because that makes it easier to run multiple instances of the application (with different configuration data) on a machine without having multiple copies of it. As a web application, it has a few images, and a style.css file to distribute, and it also has a misc directory in the package (which perhaps shouldn't go there, but that's the way I'm trying to do it for now...) which includes a sample *.cgi file, *.conf file, and a python script intended to be run as a script (rather than imported as a module/package). I'm using the data_files argument to pass in those files, and I determine the directory to install to by extrapolating from the value of distutils.sysconfig.get_python_lib(), but that doesn't work right when I do a bdist_wininst (I haven't tried to do an RPM, yet, so I don't know if that works)... The files end up in "c:\python23\python23\projectTasks...." instead of "c:\python23\Lib\site-packages\projectTasks....". I've figured out a hack to do to the data_files (in code below) to make it work, but then the sdist doesn't work right, on Linux or Win32. Is there a way to achieve what I'm attempting, or do I just need to figure out at run time what the user is trying to do (build a bdist, or run an sdist), and decide then whether to apply my hack or not? Thanks, Jason Sibre Here's my setup.py file: --------------------------- #!/usr/bin/python import os, os.path from distutils.core import setup from distutils.sysconfig import get_python_lib from quixote.qx_distutils import qx_build_py def getFiles(path): fullFiles = [] files = os.listdir(path) for f in files: if f == "CVS": continue fullFiles.append(os.path.join(path,f)) return fullFiles webdir = os.path.join(get_python_lib(),'projectTasks','web') miscFiles = getFiles('web/misc') staticFiles = getFiles('web/staticFiles') #I think this is the 'right' way to do it, #and creates sdists that play nicely data_files = [ (os.path.join(webdir, 'misc'), miscFiles), (os.path.join(webdir, 'staticFiles'), staticFiles), ] #This works (as a hack) to get a win binary to install nicely #But of course makes a mess if you install from an sdist #data_files = [ # ('../PURELIB/projectTasks/web/misc', miscFiles), # ('../PURELIB/projectTasks/web/staticFiles', staticFiles), # ] setup( name = 'projectTasks', version = "0.1.0", description = "Project Task manager app for Quixote framework.", author = "Jason Sibre", author_email = "jsibre@chironsys.com", package_dir = {'projectTasks':'.'}, packages = ['projectTasks','projectTasks.web'], data_files = data_files, cmdclass = {'build_py': qx_build_py}, )
participants (1)
-
Jason Sibre