【问题标题】:TypeError: dist must be a Distribution instanceTypeError: dist 必须是 Distribution 实例
【发布时间】:2014-02-03 20:29:24
【问题描述】:

我的包依赖于 BeautifulSoup。如果我通过 python setup.py develop 在新的 virtualenv 中安装我的包,我会收到以下错误。如果我再次执行python setup.py develop,一切似乎都正常。我不知道,发生了什么。如何修复它以获得可重现的设置?

Best match: beautifulsoup4 4.3.2
Downloading https://pypi.python.org/packages/source/b/beautifulsoup4/beautifulsoup4-4.3.2.tar.gz#md5=b8d157a204d56512a4cc196e53e7d8ee
Processing beautifulsoup4-4.3.2.tar.gz
Writing /tmp/easy_install-1eBfi3/beautifulsoup4-4.3.2/setup.cfg
Running beautifulsoup4-4.3.2/setup.py -q bdist_egg --dist-dir /tmp/easy_install-1eBfi3/beautifulsoup4-4.3.2/egg-dist-tmp-YmoFSq
Traceback (most recent call last):
  File "setup.py", line 73, in <module>
    """,
  File "/usr/lib/python2.7/distutils/core.py", line 152, in setup
    dist.run_commands()
  File "/usr/lib/python2.7/distutils/dist.py", line 953, in run_commands
    self.run_command(cmd)
  File "/usr/lib/python2.7/distutils/dist.py", line 972, in run_command
    cmd_obj.run()
  File "/home/domma/VirtualEnvs/orcid/local/lib/python2.7/site-packages/setuptools/command/develop.py", line 27, in run
    self.install_for_development()
  File "/home/domma/VirtualEnvs/orcid/local/lib/python2.7/site-packages/setuptools/command/develop.py", line 129, in install_for_development
    self.process_distribution(None, self.dist, not self.no_deps)
  File "/home/domma/VirtualEnvs/orcid/local/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 671, in process_distribution
    [requirement], self.local_index, self.easy_install
  File "/home/domma/VirtualEnvs/orcid/local/lib/python2.7/site-packages/pkg_resources.py", line 564, in resolve
    dist = best[req.key] = env.best_match(req, self, installer)
  File "/home/domma/VirtualEnvs/orcid/local/lib/python2.7/site-packages/pkg_resources.py", line 802, in best_match
    return self.obtain(req, installer) # try and download/install
  File "/home/domma/VirtualEnvs/orcid/local/lib/python2.7/site-packages/pkg_resources.py", line 814, in obtain
    return installer(requirement)
  File "/home/domma/VirtualEnvs/orcid/local/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 593, in easy_install
    return self.install_item(spec, dist.location, tmpdir, deps)
  File "/home/domma/VirtualEnvs/orcid/local/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 623, in install_item
    dists = self.install_eggs(spec, download, tmpdir)
  File "/home/domma/VirtualEnvs/orcid/local/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 809, in install_eggs
    return self.build_and_install(setup_script, setup_base)
  File "/home/domma/VirtualEnvs/orcid/local/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 1015, in build_and_install
    self.run_setup(setup_script, setup_base, args)
  File "/home/domma/VirtualEnvs/orcid/local/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 1000, in run_setup
    run_setup(setup_script, args)
  File "/home/domma/VirtualEnvs/orcid/local/lib/python2.7/site-packages/setuptools/sandbox.py", line 50, in run_setup
    lambda: execfile(
  File "/home/domma/VirtualEnvs/orcid/local/lib/python2.7/site-packages/setuptools/sandbox.py", line 100, in run
    return func()
  File "/home/domma/VirtualEnvs/orcid/local/lib/python2.7/site-packages/setuptools/sandbox.py", line 52, in <lambda>
    {'__file__':setup_script, '__name__':'__main__'}
  File "setup.py", line 27, in <module>
    'raven',
  File "/usr/lib/python2.7/distutils/core.py", line 152, in setup
    dist.run_commands()
  File "/usr/lib/python2.7/distutils/dist.py", line 953, in run_commands
    self.run_command(cmd)
  File "/usr/lib/python2.7/distutils/dist.py", line 970, in run_command
    cmd_obj = self.get_command_obj(command)
  File "/usr/lib/python2.7/distutils/dist.py", line 846, in get_command_obj
    cmd_obj = self.command_obj[command] = klass(self)
  File "/home/domma/VirtualEnvs/orcid/local/lib/python2.7/site-packages/setuptools/__init__.py", line 69, in __init__
    _Command.__init__(self,dist)
  File "/usr/lib/python2.7/distutils/cmd.py", line 59, in __init__
    raise TypeError, "dist must be a Distribution instance"
TypeError: dist must be a Distribution instance

【问题讨论】:

    标签: python setuptools distutils


    【解决方案1】:

    安装 dnspython。点安装 dnspython。或者检查你是否有旧版本的 dnspython 并升级

    【讨论】:

      【解决方案2】:

      尝试使用 pip 安装你的包

      $ pip install -e path/to/your/Project
      

      更多信息请参见http://pip.readthedocs.org/en/latest/reference/pip_install.html#editable-installs

      【讨论】:

        【解决方案3】:

        此错误与您计算机上安装的distutilssetuptools 版本之间的差异有关。将setuptools 升级到当前版本可能会解决此问题。

        编辑:这个解决方案不再适用于我(显然对 Jens 没有用 - 请参阅下面的评论)。现在对我有用的是在我调用的任何脚本中导入 setuptools 之前导致此错误的任何其他内容。

        这个错误在 GitHub 上的许多问题、许多包中都有讨论,但我发现 this discussion 提供的信息最多。

        【讨论】:

        • 这对我不起作用,setuptools 从系统上的 distutils.core 导入 setup 函数,因此永远不会更新...
        • @JensTimmerman 到底有什么解决办法呢?我继续遇到这个错误,你是对的,我提出的解决方案通常不起作用。我看到您在 GitHub 上参与了与此相关的问题。
        • 修补 distutils 以不执行此检查已为我解决此问题,请参阅下面 Run2 的答案。
        【解决方案4】:

        我能够解决它的唯一方法是关注https://bugs.python.org/file37554/distutils_accomodate_distribution_ducktypes.patch 所以 - 我删除了 /usr/lib/python2.7/distutils/cmd.py 和 /usr/lib/python2.7/distutils/cmd.pyc (运行 python setup.py develop - 只是为了确保它失败并且是不使用其他地方的 pyc ),然后重新创建 /usr/lib/python2.7/distutils/cmd.py - 只是这次进行了补丁中显示的更改。然后当我再次使用 python setup.py - 它工作了..

        【讨论】:

        • 知道这个补丁是什么时候被合并到 distutils 中的吗?可能是 。 . .现在是 2018 年。 . .我只需要更改为不再具有此错误的某些特定版本的 distutils 。 . .
        【解决方案5】:

        当我遇到这种情况时,乍一看它似乎在抱怨 Distribution() 没有生成 Distribution 实例,但这只是部分正确。

        setuptools 提供了自己的Distribution,猴子将其修补成distutils。这在大多数情况下都有效,但如果您在导入 setuptools 并发挥其魔力之前获得对 Distribution 的引用,则会失败。

        脚本顶部写着:

        from distutils.dist import Distribution

        然后我们导入和使用setuptools 的各个部分。

        在我的情况下,解决方案是在使用它的函数中进行后期导入,以便在加载 setuptools 之后获得 Distribution

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-03-21
          • 2021-04-08
          • 2018-12-09
          • 2012-05-04
          • 1970-01-01
          • 1970-01-01
          • 2021-10-18
          相关资源
          最近更新 更多