[IPython-dev] Help needed: stumped by odd MANIFEST.in/distutils behavior

Paul Ivanov pivanov314 at gmail.com
Mon Oct 10 15:56:06 EDT 2011


On Sun, Oct 9, 2011 at 11:23 PM, Paul Ivanov <pivanov314 at gmail.com> wrote:
> On Sun, Oct 9, 2011 at 1:51 PM, Fernando Perez <fperez.net at gmail.com> wrote:
>>
>> I'm pretty stumped, so any ideas would be very much appreciated.
>
> I took a brief look - it looks like something about distribute and
> setuptools being used together.

I poked around some more: looks like importing setuptools changes
distutils.dist.Distribution to point to setuptools.dist.Distribution,
and also does the same with command.sdist, with setuptools' version
not implementing user_options like 'manifest-only' (see
setuptools/dist.py:642-644)

Compare just the --help sdist command with and without importing setuptools.
$ python setup.py --help sdist

without setuptools:
---
Options for 'sdist' command:
  --template (-t)        name of manifest template file [default: MANIFEST.in]
  --manifest (-m)        name of manifest file [default: MANIFEST]
  --use-defaults         include the default file set in the manifest
                         [default; disable with --no-defaults]
  --no-defaults          don't include the default file set
  --prune                specifically exclude files/directories that should
                         not be distributed (build tree, RCS/CVS dirs, etc.)
                         [default; disable with --no-prune]
  --no-prune             don't automatically exclude anything
  --manifest-only (-o)   just regenerate the manifest and then stop (implies
                         --force-manifest)
  --force-manifest (-f)  forcibly regenerate the manifest and carry on as
                         usual. Deprecated: now the manifest is always
                         regenerated.
  --formats              formats for source distribution (comma-separated
                         list)
  --keep-temp (-k)       keep the distribution tree around after creating
                         archive file(s)
  --dist-dir (-d)        directory to put the source distribution archive(s)
                         in [default: dist]
  --metadata-check       Ensure that all required elements of meta-data are
                         supplied. Warn if any missing. [default]
  --owner (-u)           Owner name used when creating a tar file [default:
                         current user]
  --group (-g)           Group name used when creating a tar file [default:
                         current group]
  --help-formats         list available distribution formats
---

When setuptools is imported, the help string is much shorter, and
shows none of the usual user_options.
---
Options for 'sdist' command:
  --formats         formats for source distribution (comma-separated list)
  --keep-temp (-k)  keep the distribution tree around after creating archive
                    file(s)
  --dist-dir (-d)   directory to put the source distribution archive(s) in
                    [default: dist]
  --help-formats    list available distribution formats
---


I guess if setuptools really is needed to be imported, one way to get
back the functionality would be to reverse-monkeypatch distutils'
Distribution back in using the following patch (or something like it,
perhaps only if '--manifest-only' or '-o' flags are passed):

diff --git a/setup2.py b/setup2.py
index 1c12356..3a37c6c 100755
--- a/setup2.py
+++ b/setup2.py
@@ -212,6 +212,10 @@ if len(needs_setuptools.intersection(sys.argv)) > 0:
 setuptools_extra_args = {}

 if 'setuptools' in sys.modules:
+    # reverse monkeypatch setuptools/dist.py:643-644
+    import distutils
+    for module in distutils.dist, distutils.core, distutils.cmd:
+            module.Distribution = setuptools.dist._Distribution
     setuptools_extra_args['zip_safe'] = False
     setuptools_extra_args['entry_points'] = find_scripts(True)
     setup_args['extras_require'] = dict(

Doing the above, however, will cause these warnings to start showing up
distutils/dist.py:267: UserWarning: Unknown distribution option:
'install_requires'
  warnings.warn(msg)
distutils/dist.py:267: UserWarning: Unknown distribution option:
'extras_require'
  warnings.warn(msg)
python2.7/distutils/dist.py:267: UserWarning: Unknown distribution
option: 'zip_safe'
  warnings.warn(msg)
python2.7/distutils/dist.py:267: UserWarning: Unknown distribution
option: 'entry_points

hth,
-- 
Paul Ivanov
314 address only used for lists,  off-list direct email at:
http://pirsquared.org | GPG/PGP key id: 0x0F3E28F7



More information about the IPython-dev mailing list