Distutils and easy_install...
Hey everyone, I'm having an annoying problem and I was directed here to see if you knew what could be done. I'm using distutils for my package instead of setuptools because it's a command line app, and the half second that setup tools adds to each launch for pkg_resource scanning is unacceptable. I use the scripts parameter, and it happily installs the script I expect and things are running along. If I try to use easy_install to install the package, however, (and more importantly, if a user of mine does) it seems that setuptools is monkeypatching the distutils module and replacing setup. This means that instead of just copying my script to bin, setuptools is creating it's own script that does a pkg_resource scan and then loads my script from the original location. Is there any way to ensure that I'm using the distutils.core.setup that I expect, and not the one that setuptools monkeypatches into place? Thanks, Douglas Mayle
At 01:03 PM 4/16/2009 -0400, Douglas Mayle wrote:
Hey everyone, I'm having an annoying problem and I was directed here to see if you knew what could be done.
I'm using distutils for my package instead of setuptools because it's a command line app, and the half second that setup tools adds to each launch for pkg_resource scanning is unacceptable. I use the scripts parameter, and it happily installs the script I expect and things are running along. If I try to use easy_install to install the package, however, (and more importantly, if a user of mine does) it seems that setuptools is monkeypatching the distutils module and replacing setup. This means that instead of just copying my script to bin, setuptools is creating it's own script that does a pkg_resource scan and then loads my script from the original location. Is there any way to ensure that I'm using the distutils.core.setup that I expect, and not the one that setuptools monkeypatches into place?
Use "easy_install -eb. MyPackage" to download the source (which will be placed in a 'mypackage/' subdirectory, then change to that directory and run "setup.py install" to install using distutils instead of setuptools.
Sorry, I meant to send this onlist. Reposting: In the end, after some great suggestions and debugging help from Ian Bicking, I managed to monkeypatch the monkeypatch to restore my original script. I was using a hybrid approach (sometimes importing distutils, sometimes setuptools) to avoid the script handling, but with this workaround, I should be able just to switch back to setuptools so that I don't have to think about it. In my case, I have an install_script stub: def install_script(self, dist, script_name, script_text, dev_path=None): self.write_script(script_name, script_text, 'b') And I then monkeypatch setuptools if it's loaded: if sys.platform != 'win32' and 'setuptools' in sys.modules: # Someone used easy_install to run this. I really want the correct # script installed. import setuptools.command.easy_install setuptools.command.easy_install.easy_install.install_script = install_script You'll notice that I leave the patching alone on win32, because I understand the desirability of having an exe file there... Thanks, Douglas Mayle On Apr 16, 2009, at 2:32 PM, P.J. Eby wrote:
At 01:03 PM 4/16/2009 -0400, Douglas Mayle wrote:
Hey everyone, I'm having an annoying problem and I was directed here to see if you knew what could be done.
I'm using distutils for my package instead of setuptools because it's a command line app, and the half second that setup tools adds to each launch for pkg_resource scanning is unacceptable. I use the scripts parameter, and it happily installs the script I expect and things are running along. If I try to use easy_install to install the package, however, (and more importantly, if a user of mine does) it seems that setuptools is monkeypatching the distutils module and replacing setup. This means that instead of just copying my script to bin, setuptools is creating it's own script that does a pkg_resource scan and then loads my script from the original location. Is there any way to ensure that I'm using the distutils.core.setup that I expect, and not the one that setuptools monkeypatches into place?
Use "easy_install -eb. MyPackage" to download the source (which will be placed in a 'mypackage/' subdirectory, then change to that directory and run "setup.py install" to install using distutils instead of setuptools.
participants (2)
-
Douglas Mayle -
P.J. Eby