#3 `setup.py install` from VCS checkout fails: AttributeError: 'module' object has no attribute 'ChangelogAwareDistribution'
Closed: Fixed by bignose. Opened by nickallencse.

Attempting to install through setup.py raises the following exception:

Traceback (most recent call last):
  File "setup.py", line 86, in <module>
    "Topic :: Software Development :: Libraries :: Python Modules",
  File "/usr/local/Cellar/python/2.7.12_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/core.py", line 111, in setup
    _setup_distribution = dist = klass(attrs)
  File "/Users/nick/workspace/repos/personal/python-daemon/version.py", line 640, in __init__
    super(ChangelogAwareDistribution, self).__init__(*args, **kwargs)
  File "/Users/nick/.virtualenvs/p2/lib/python2.7/site-packages/setuptools/dist.py", line 315, in __init__
    self.fetch_build_eggs(attrs['setup_requires'])
  File "/Users/nick/.virtualenvs/p2/lib/python2.7/site-packages/setuptools/dist.py", line 361, in fetch_build_eggs
    replace_conflicting=True,
  File "/Users/nick/.virtualenvs/p2/lib/python2.7/site-packages/pkg_resources/__init__.py", line 850, in resolve
    dist = best[req.key] = env.best_match(req, ws, installer)
  File "/Users/nick/.virtualenvs/p2/lib/python2.7/site-packages/pkg_resources/__init__.py", line 1122, in best_match
    return self.obtain(req, installer)
  File "/Users/nick/.virtualenvs/p2/lib/python2.7/site-packages/pkg_resources/__init__.py", line 1134, in obtain
    return installer(requirement)
  File "/Users/nick/.virtualenvs/p2/lib/python2.7/site-packages/setuptools/dist.py", line 427, in fetch_build_egg
    cmd.ensure_finalized()
  File "/usr/local/Cellar/python/2.7.12_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/cmd.py", line 109, in ensure_finalized
    self.finalize_options()
  File "/Users/nick/.virtualenvs/p2/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 250, in finalize_options
    'dist_version': self.distribution.get_version(),
  File "/Users/nick/workspace/repos/personal/python-daemon/version.py", line 656, in get_version
    version_info = self.get_version_info()
  File "/Users/nick/workspace/repos/personal/python-daemon/version.py", line 651, in get_version_info
    changelog_path = get_changelog_path(self)
  File "/Users/nick/workspace/repos/personal/python-daemon/version.py", line 552, in get_changelog_path
    setup_dirname = os.path.dirname(distribution.script_name)
  File "/Users/nick/.virtualenvs/p2/bin/../lib/python2.7/posixpath.py", line 122, in dirname
    i = p.rfind('/') + 1
AttributeError: 'NoneType' object has no attribute 'rfind'

Listing the package as a dependency in another package's setup.py install_requires section causes the following exception:

Traceback (most recent call last):
  File "setup.py", line 281, in <module>
    do_setup()
  File "setup.py", line 275, in do_setup
    'extra_clean': CleanCommand,
  File "/usr/local/Cellar/python/2.7.12_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/core.py", line 151, in setup
    dist.run_commands()
  File "/usr/local/Cellar/python/2.7.12_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py", line 953, in run_commands
    self.run_command(cmd)
  File "/usr/local/Cellar/python/2.7.12_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py", line 972, in run_command
    cmd_obj.run()
  File "/Users/nick/.virtualenvs/p2/lib/python2.7/site-packages/setuptools/command/install.py", line 67, in run
    self.do_egg_install()
  File "/Users/nick/.virtualenvs/p2/lib/python2.7/site-packages/setuptools/command/install.py", line 117, in do_egg_install
    cmd.run()
  File "/Users/nick/.virtualenvs/p2/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 410, in run
    self.easy_install(spec, not self.no_deps)
  File "/Users/nick/.virtualenvs/p2/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 646, in easy_install
    return self.install_item(None, spec, tmpdir, deps, True)
  File "/Users/nick/.virtualenvs/p2/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 697, in install_item
    self.process_distribution(spec, dist, deps)
  File "/Users/nick/.virtualenvs/p2/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 742, in process_distribution
    [requirement], self.local_index, self.easy_install
  File "/Users/nick/.virtualenvs/p2/lib/python2.7/site-packages/pkg_resources/__init__.py", line 850, in resolve
    dist = best[req.key] = env.best_match(req, ws, installer)
  File "/Users/nick/.virtualenvs/p2/lib/python2.7/site-packages/pkg_resources/__init__.py", line 1122, in best_match
    return self.obtain(req, installer)
  File "/Users/nick/.virtualenvs/p2/lib/python2.7/site-packages/pkg_resources/__init__.py", line 1134, in obtain
    return installer(requirement)
  File "/Users/nick/.virtualenvs/p2/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 665, in easy_install
    return self.install_item(spec, dist.location, tmpdir, deps)
  File "/Users/nick/.virtualenvs/p2/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 695, in install_item
    dists = self.install_eggs(spec, download, tmpdir)
  File "/Users/nick/.virtualenvs/p2/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 876, in install_eggs
    return self.build_and_install(setup_script, setup_base)
  File "/Users/nick/.virtualenvs/p2/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 1115, in build_and_install
    self.run_setup(setup_script, setup_base, args)
  File "/Users/nick/.virtualenvs/p2/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 1101, in run_setup
    run_setup(setup_script, args)
  File "/Users/nick/.virtualenvs/p2/lib/python2.7/site-packages/setuptools/sandbox.py", line 251, in run_setup
    raise
  File "/usr/local/Cellar/python/2.7.12_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/contextlib.py", line 35, in __exit__
    self.gen.throw(type, value, traceback)
  File "/Users/nick/.virtualenvs/p2/lib/python2.7/site-packages/setuptools/sandbox.py", line 198, in setup_context
    yield
  File "/usr/local/Cellar/python/2.7.12_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/contextlib.py", line 35, in __exit__
    self.gen.throw(type, value, traceback)
  File "/Users/nick/.virtualenvs/p2/lib/python2.7/site-packages/setuptools/sandbox.py", line 169, in save_modules
    saved_exc.resume()
  File "/Users/nick/.virtualenvs/p2/lib/python2.7/site-packages/setuptools/sandbox.py", line 144, in resume
    six.reraise(type, exc, self._tb)
  File "/Users/nick/.virtualenvs/p2/lib/python2.7/site-packages/setuptools/sandbox.py", line 157, in save_modules
    yield saved
  File "/Users/nick/.virtualenvs/p2/lib/python2.7/site-packages/setuptools/sandbox.py", line 198, in setup_context
    yield
  File "/Users/nick/.virtualenvs/p2/lib/python2.7/site-packages/setuptools/sandbox.py", line 248, in run_setup
    DirectorySandbox(setup_dir).run(runner)
  File "/Users/nick/.virtualenvs/p2/lib/python2.7/site-packages/setuptools/sandbox.py", line 278, in run
    return func()
  File "/Users/nick/.virtualenvs/p2/lib/python2.7/site-packages/setuptools/sandbox.py", line 246, in runner
    _execfile(setup_script, ns)
  File "/Users/nick/.virtualenvs/p2/lib/python2.7/site-packages/setuptools/sandbox.py", line 47, in _execfile
    exec(code, globals, locals)
  File "/var/folders/mr/gy4bvsm537b70tj1fvl869y80000gn/T/easy_install-4ffUuA/python-daemon-2.1.2/setup.py", line 43, in <module>
    sys.exit(errno)
AttributeError: 'module' object has no attribute 'ChangelogAwareDistribution'

On 23-Nov-2016, Nick Allen wrote:

Attempting to install through setup.py raises the following exception:

Thanks for the report. What specific command did you invoke? What
version of Python, what version of =E2=80=98python-daemon=E2=80=99?

Traceback (most recent call last): [=E2=80=A6] File "/Users/nick/workspace/repos/personal/python-daemon/version.py", l= ine 552, in get_changelog_path setup_dirname =3D os.path.dirname(distribution.script_name) File "/Users/nick/.virtualenvs/p2/bin/../lib/python2.7/posixpath.py", l= ine 122, in dirname i =3D p.rfind('/') + 1 AttributeError: 'NoneType' object has no attribute 'rfind'

This implies that the Distribution object does not have its
=E2=80=98script_name=E2=80=99 assigned. That will happen in the =E2=80=98se=
tup=E2=80=99 function call,
so I don't see how it could be None here.

Listing the package as a dependency in another package's setup.py install=
_requires section causes the following exception:

I will need more detail before this description is useable to
reproduce the behaviour :-)

```Traceback (most recent call last):
File "setup.py", line 281, in
do_setup()
File "setup.py", line 275, in do_setup
'extra_clean': CleanCommand,
[=E2=80=A6]
File "/var/folders/mr/gy4bvsm537b70tj1fvl869y80000gn/T/easy_install-4ff=
UuA/python-daemon-2.1.2/setup.py", line 43, in
sys.exit(errno)

None of this seems to be the actual =E2=80=98setup.py=E2=80=99 module distr=
ibuted with
=E2=80=98python-daemon=E2=80=99 version 2.1.2, so I don't know what code th=
at is.

--=20
\ =E2=80=9CI got an answering machine for my phone. Now when some=
one |
`\ calls me up and I'm not home, they get a recording of a busy |
_o__) signal.=E2=80=9D =E2=80=94St=
even Wright |
Ben Finney ben@benfinney.id.au

Initially found the issue attempting to run python setup.py install on
the Apache airflow package. Then tried running the same command in python
daemon directly with the same problem.

Pip install seems to work without a problem.

From fresh Python 3.5 virtualenv and checking out release/2.1.2 tag:

$ python setup.py install                                                                                                                                                                                                                                                                               p3 9:49:37
Traceback (most recent call last):
  File "/home/nick/.virtualenvs/p3/lib/python3.5/site-packages/setuptools/dist.py", line 402, in fetch_build_egg
    cmd = self._egg_fetcher
AttributeError: 'ChangelogAwareDistribution' object has no attribute '_egg_fetcher'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File "setup.py", line 86, in <module>
    "Topic :: Software Development :: Libraries :: Python Modules",
  File "/usr/lib/python3.5/distutils/core.py", line 108, in setup
    _setup_distribution = dist = klass(attrs)
  File "/home/nick/workspace/repos/swimlane/python-daemon/version.py", line 640, in __init__
    super(ChangelogAwareDistribution, self).__init__(*args, **kwargs)
  File "/home/nick/.virtualenvs/p3/lib/python3.5/site-packages/setuptools/dist.py", line 315, in __init__
    self.fetch_build_eggs(attrs['setup_requires'])
  File "/home/nick/.virtualenvs/p3/lib/python3.5/site-packages/setuptools/dist.py", line 361, in fetch_build_eggs
    replace_conflicting=True,
  File "/home/nick/.virtualenvs/p3/lib/python3.5/site-packages/pkg_resources/__init__.py", line 850, in resolve
    dist = best[req.key] = env.best_match(req, ws, installer)
  File "/home/nick/.virtualenvs/p3/lib/python3.5/site-packages/pkg_resources/__init__.py", line 1122, in best_match
    return self.obtain(req, installer)
  File "/home/nick/.virtualenvs/p3/lib/python3.5/site-packages/pkg_resources/__init__.py", line 1134, in obtain
    return installer(requirement)
  File "/home/nick/.virtualenvs/p3/lib/python3.5/site-packages/setuptools/dist.py", line 427, in fetch_build_egg
    cmd.ensure_finalized()
  File "/usr/lib/python3.5/distutils/cmd.py", line 107, in ensure_finalized
    self.finalize_options()
  File "/home/nick/.virtualenvs/p3/lib/python3.5/site-packages/setuptools/command/easy_install.py", line 250, in finalize_options
    'dist_version': self.distribution.get_version(),
  File "/home/nick/workspace/repos/swimlane/python-daemon/version.py", line 656, in get_version
    version_info = self.get_version_info()
  File "/home/nick/workspace/repos/swimlane/python-daemon/version.py", line 651, in get_version_info
    changelog_path = get_changelog_path(self)
  File "/home/nick/workspace/repos/swimlane/python-daemon/version.py", line 552, in get_changelog_path
    setup_dirname = os.path.dirname(distribution.script_name)
  File "/home/nick/.virtualenvs/p3/lib/python3.5/posixpath.py", line 148, in dirname
    i = p.rfind(sep) + 1
AttributeError: 'NoneType' object has no attribute 'rfind'

Python 2.7 release/2.1.2:

$ python setup.py install                                                                                                                                                                                                                                                                              p2 9:52:04
Traceback (most recent call last):
  File "setup.py", line 86, in <module>
    "Topic :: Software Development :: Libraries :: Python Modules",
  File "/usr/lib/python2.7/distutils/core.py", line 111, in setup
    _setup_distribution = dist = klass(attrs)
  File "/home/nick/workspace/repos/swimlane/python-daemon/version.py", line 640, in __init__
    super(ChangelogAwareDistribution, self).__init__(*args, **kwargs)
  File "/home/nick/.virtualenvs/p2/local/lib/python2.7/site-packages/setuptools/dist.py", line 315, in __init__
    self.fetch_build_eggs(attrs['setup_requires'])
  File "/home/nick/.virtualenvs/p2/local/lib/python2.7/site-packages/setuptools/dist.py", line 361, in fetch_build_eggs
    replace_conflicting=True,
  File "/home/nick/.virtualenvs/p2/local/lib/python2.7/site-packages/pkg_resources/__init__.py", line 850, in resolve
    dist = best[req.key] = env.best_match(req, ws, installer)
  File "/home/nick/.virtualenvs/p2/local/lib/python2.7/site-packages/pkg_resources/__init__.py", line 1122, in best_match
    return self.obtain(req, installer)
  File "/home/nick/.virtualenvs/p2/local/lib/python2.7/site-packages/pkg_resources/__init__.py", line 1134, in obtain
    return installer(requirement)
  File "/home/nick/.virtualenvs/p2/local/lib/python2.7/site-packages/setuptools/dist.py", line 427, in fetch_build_egg
    cmd.ensure_finalized()
  File "/usr/lib/python2.7/distutils/cmd.py", line 109, in ensure_finalized
    self.finalize_options()
  File "/home/nick/.virtualenvs/p2/local/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 250, in finalize_options
    'dist_version': self.distribution.get_version(),
  File "/home/nick/workspace/repos/swimlane/python-daemon/version.py", line 656, in get_version
    version_info = self.get_version_info()
  File "/home/nick/workspace/repos/swimlane/python-daemon/version.py", line 651, in get_version_info
    changelog_path = get_changelog_path(self)
  File "/home/nick/workspace/repos/swimlane/python-daemon/version.py", line 552, in get_changelog_path
    setup_dirname = os.path.dirname(distribution.script_name)
  File "/home/nick/.virtualenvs/p2/lib/python2.7/posixpath.py", line 122, in dirname
    i = p.rfind('/') + 1
AttributeError: 'NoneType' object has no attribute 'rfind'

I do have the same issue.
Is there any known workaround ?

From fresh Python 3.5 virtualenv and checking out release/2.1.2 tag […]

Before development can proceed, you need to have the correct
distributions installed. But Setuptools is preventing you from doing
that easily.

The dependencies are declared in the Setuptools configuration:

  • setup_requires declares dependencies for any Setuptools actions.

  • tests_require declares dependencies for running the test suite.

  • install_requires declares dependencies for installing the
    distribution.

etc.

So the bug is ;
Setuptools behaves incorrectly when setup_requires specifies a
distribution that is also a dependency in install_requires.

You can work around this Setuptools bug, by manually installing the
dependent distributions, in order to work on the code.

Thanks for the detailed answer @bignose.
Concretely, here the issue is with the docutils dependency ?
cf. https://pagure.io/python-daemon/blob/master/f/setup.py#_54

I can confirm that the following command reproduces the bug:

pip install https://pypi.python.org/packages/b2/fb/a280d65f81e9d69989c8d6c4e0bb18d7280cdcd6d406a2cc3f4eb47d4402/python-daemon-2.1.2.tar.gz

While this this works pefectly well:

pip install docutils
pip install https://pypi.python.org/packages/b2/fb/a280d65f81e9d69989c8d6c4e0bb18d7280cdcd6d406a2cc3f4eb47d4402/python-daemon-2.1.2.tar.gz

Thanks for the help ;)

I guess this issue is fixed by #23 (https://pagure.io/python-daemon/pull-request/23)

With a PEP 518 conformant build system specification, I think this issue is now resolved:

$ python3 -m pip install https://files.pythonhosted.org/packages/8b/50/254c0b5b99c24fc79e41fd08269ad62549322a7356a52830f5f95b873c36/python-daemon-2.2.2.tar.gz
[]
Successfully built python-daemon
Installing collected packages: lockfile, python-daemon
Successfully installed lockfile-0.12.2 python-daemon-2.2.2

Metadata Update from @bignose:
- Issue close_status updated to: Fixed
- Issue status updated to: Closed (was: Open)

Metadata