[Distutils] Package in both setup_requires and install_requires will not be installed
Michael Hoffman
b3i4old02 at sneakemail.com
Sat Oct 13 23:47:47 CEST 2007
Phillip J. Eby wrote:
> At 09:26 PM 10/13/2007 +0100, Michael Hoffman wrote:
>> Phillip J. Eby wrote:
>>> At 12:42 AM 9/18/2007 +0100, Michael Hoffman wrote:
>>>> Michael Hoffman wrote:
>>>>
>>>>> If you specify a package in setup_requires it will be built in the
>>>>> current directory. But even if it is in install_requires as well, it
>>>>> won't be installed because the requirement is already satisfied at setup
>>>>> time by the package in the build directory.
>>>> I came up with this workaround:
>>>>
>>> >from setuptools.command.install import install
>>>> class SubprocessEasyInstall(install):
>>>> def run(self):
>>>> install.run(self)
>>>>
>>>> args = [sys.executable, "-m", "easy_install"] + setup_requires
>>>> check_call(args)
>>>>
>>>> And in the setup() call, ensure you include:
>>>>
>>>> cmdclass=dict(install=SubprocessEasyInstall)
>>>>
>>>> This will easy_install the setup_requires in a separate process which is
>>>> unpolluted by the distributions already downloaded during setup.
>>> Don't do this. It will do evil things if for example someone runs
>>> "setup.py install --help", or uses indeed any options or arguments to
>>> 'install' at all.
>>>
>>> It will also break the bdist_rpm, bdist_wininst, and other commands,
>>> which invoke 'install' as a subcommand, with various options set.
>> Would you like to suggest a better workaround?
>
> Well, you could do something similar, but look at do_egg_install in
> setuptools.command.install to see how to construct a good command
> line for the child process.
Alright, I've added this to the to-do list for my app.
> The full fix is going to be a lot more complicated, unfortunately.
Yes, that's too bad.
More information about the Distutils-SIG
mailing list