I've been trying to use setuptools as a "Pythonic Autopackage". Basically, I want users to be able install a Python package -- plus all its needed dependencies -- with a single command, without any preparatory steps, and with no questions asked.
To this end, the best strategy seems to be the "app folder" strategy used on Windows. On Windows, the runtime linker/loader implicitly adds the directory containing the main '.exe' to the DLL search path. This means that regardless of any environment settings (such as PATH), DLLs put alongside the main EXE will be found -- and, with few exceptions, will override DLLs elsewhere on the system. This fact is routinely exploited on Windows: you can dump your EXE and all its needed dependencies in a single folder, and it will "just work". The Python interpreter is similar to the Windows loader in that the directory containing the main Python script is always first on 'sys.path'. This fact, combined with the awesome 'setuptools' package and easy_install's --install-dir (-d) option would seem to give me everything I need. However, there are road blocks which I can't seem to get around (without patching setuptools, that is). The chief problem seems to be that setuptools complains too much! *) It complains if the destination directory doesn't exist. *) It complains if the destination directory doesn't support .pth files or isn't on PYTHONPATH. Actually, I find the errors about .pth/PYTHONPATH to be annoying in general. On Unix, I'm accustomed to tools which simply do what they're told, be it "rm -rf *" or anything else. For example, "./configure --prefix=$HOME/foo/bar; make; make install" will create $HOME/foo/bar if it doesn't already exist, and Autoconf certainly doesn't complain about the subdirectories thus created not being on PATH or PYTHONPATH. One could argue that this amounts to a philosophical difference. But to me, the .pth/PYTHONPATH errors seem like a bug/limitation. If I tell easy_install to create a directory containing my app's scripts, plus all its (possibly "flat") egg dependencies, the resulting directory *will* work once all the dust clears, regardless of what my PYTHONPATH may contain at install time. Even in the case of .pth files, there is no way to know at install time what might work at runtime -- for example, my app's generated, top-level scripts might call site.addsitedir() themselves on behalf of the application. But perhaps I've just overlooked something. Is there a way to to tell setuptools to simply do what it's told? --Leif _______________________________________________ Distutils-SIG maillist - [email protected] http://mail.python.org/mailman/listinfo/distutils-sig
