断言错误:Egg-link ...与ReviewBoard的安装位置(位于/...)不匹配。

35
AssertionError: Egg-link /home/daniel/other-rb/reviewboard does not match installed location of ReviewBoard (at /home/daniel/reviewboard)

我相信这是由于我在同一虚拟环境中使用不同的位置安装了一个软件包所致。

我该如何解决这个问题?我猜我需要重定向Egg-link以匹配已安装的位置?

堆栈跟踪:

(reviewboard-3.0) daniel@beepboop ~/reviewboard $ ./setup.py develop
/home/daniel/envs/reviewboard-3.0/local/lib/python2.7/site-packages/setuptools/dist.py:334: UserWarning: Normalizing '4.0alpha0' to '4.0a0'
  normalized_version,
running develop
Requirement already up-to-date: setuptools in /home/daniel/envs/reviewboard-3.0/lib/python2.7/site-packages
Requirement already up-to-date: appdirs>=1.4.0 in /home/daniel/envs/reviewboard-3.0/lib/python2.7/site-packages (from setuptools)
Requirement already up-to-date: packaging>=16.8 in /home/daniel/envs/reviewboard-3.0/lib/python2.7/site-packages (from setuptools)
Requirement already up-to-date: six>=1.6.0 in /usr/lib/python2.7/dist-packages (from setuptools)
Requirement already up-to-date: pyparsing in /home/daniel/envs/reviewboard-3.0/lib/python2.7/site-packages (from packaging>=16.8->setuptools)
Requirement already up-to-date: pip in /home/daniel/envs/reviewboard-3.0/lib/python2.7/site-packages
Obtaining file:///home/daniel/reviewboard
Requirement already satisfied: django-haystack<=2.4.999,>=2.3.1 in /usr/local/lib/python2.7/dist-packages (from ReviewBoard==4.0a0.dev0)
Requirement already satisfied: django-multiselectfield in /usr/local/lib/python2.7/dist-packages (from ReviewBoard==4.0a0.dev0)
Requirement already satisfied: Django<1.6.999,>=1.6.11 in /usr/local/lib/python2.7/dist-packages (from ReviewBoard==4.0a0.dev0)
Requirement already satisfied: django_evolution<=0.7.999,>=0.7.6 in /usr/local/lib/python2.7/dist-packages (from ReviewBoard==4.0a0.dev0)
Requirement already satisfied: Djblets<=0.10.999,>=0.10a0.dev in /home/daniel/djblets (from ReviewBoard==4.0a0.dev0)
Requirement already satisfied: docutils in /usr/local/lib/python2.7/dist-packages (from ReviewBoard==4.0a0.dev0)
Requirement already satisfied: markdown<2.4.999,>=2.4.0 in /usr/local/lib/python2.7/dist-packages (from ReviewBoard==4.0a0.dev0)
Requirement already satisfied: mimeparse>=0.1.3 in /usr/local/lib/python2.7/dist-packages (from ReviewBoard==4.0a0.dev0)
Requirement already satisfied: paramiko>=1.12 in /usr/lib/python2.7/dist-packages (from ReviewBoard==4.0a0.dev0)
Requirement already satisfied: pycrypto>=2.6 in /usr/lib/python2.7/dist-packages (from ReviewBoard==4.0a0.dev0)
Requirement already satisfied: Pygments>=2.1 in /usr/local/lib/python2.7/dist-packages (from ReviewBoard==4.0a0.dev0)
Requirement already satisfied: python-dateutil==1.5 in /usr/local/lib/python2.7/dist-packages (from ReviewBoard==4.0a0.dev0)
Requirement already satisfied: python-memcached in /usr/local/lib/python2.7/dist-packages (from ReviewBoard==4.0a0.dev0)
Requirement already satisfied: pytz in /usr/local/lib/python2.7/dist-packages (from ReviewBoard==4.0a0.dev0)
Requirement already satisfied: Whoosh>=2.6 in /usr/local/lib/python2.7/dist-packages (from ReviewBoard==4.0a0.dev0)
Requirement already satisfied: pillowfight in /usr/local/lib/python2.7/dist-packages (from Djblets<=0.10.999,>=0.10a0.dev->ReviewBoard==4.0a0.dev0)
Requirement already satisfied: django-pipeline==1.6.9 in /usr/local/lib/python2.7/dist-packages (from Djblets<=0.10.999,>=0.10a0.dev->ReviewBoard==4.0a0.dev0)
Requirement already satisfied: feedparser>=5.1.2 in /usr/lib/python2.7/dist-packages (from Djblets<=0.10.999,>=0.10a0.dev->ReviewBoard==4.0a0.dev0)
Requirement already satisfied: dnspython>=1.14.0 in /usr/local/lib/python2.7/dist-packages (from Djblets<=0.10.999,>=0.10a0.dev->ReviewBoard==4.0a0.dev0)
Requirement already satisfied: publicsuffix>=1.1 in /usr/local/lib/python2.7/dist-packages (from Djblets<=0.10.999,>=0.10a0.dev->ReviewBoard==4.0a0.dev0)
Requirement already satisfied: six>=1.4.0 in /usr/lib/python2.7/dist-packages (from python-memcached->ReviewBoard==4.0a0.dev0)
Requirement already satisfied: Pillow>=3.4.2 in /usr/local/lib/python2.7/dist-packages (from pillowfight->Djblets<=0.10.999,>=0.10a0.dev->ReviewBoard==4.0a0.dev0)
Requirement already satisfied: olefile in /usr/local/lib/python2.7/dist-packages (from Pillow>=3.4.2->pillowfight->Djblets<=0.10.999,>=0.10a0.dev->ReviewBoard==4.0a0.dev0)
Installing collected packages: ReviewBoard
  Found existing installation: ReviewBoard 4.0a0.dev0
Exception:
Traceback (most recent call last):
  File "/home/daniel/envs/reviewboard-3.0/local/lib/python2.7/site-packages/pip/basecommand.py", line 215, in main
    status = self.run(options, args)
  File "/home/daniel/envs/reviewboard-3.0/local/lib/python2.7/site-packages/pip/commands/install.py", line 342, in run
    prefix=options.prefix_path,
  File "/home/daniel/envs/reviewboard-3.0/local/lib/python2.7/site-packages/pip/req/req_set.py", line 778, in install
    requirement.uninstall(auto_confirm=True)
  File "/home/daniel/envs/reviewboard-3.0/local/lib/python2.7/site-packages/pip/req/req_install.py", line 703, in uninstall
    '(at %s)' % (link_pointer, self.name, dist.location)
AssertionError: Egg-link /home/daniel/other-rb/reviewboard does not match installed location of ReviewBoard (at /home/daniel/reviewboard)
Traceback (most recent call last):
  File "./setup.py", line 434, in <module>
    'Topic :: Software Development :: Quality Assurance',
  File "/usr/lib/python2.7/distutils/core.py", line 151, 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/daniel/envs/reviewboard-3.0/local/lib/python2.7/site-packages/setuptools/command/develop.py", line 36, in run
    self.install_for_development()
  File "./setup.py", line 132, in install_for_development
    self._run_pip(['install', '-e', '.'])
  File "./setup.py", line 158, in _run_pip
    raise RuntimeError('Failed to run `%s`' % cmd)
RuntimeError: Failed to run `/home/daniel/envs/reviewboard-3.0/bin/python -m pip install -e .`
6个回答

51
如果您正在Ubuntu上使用Python3.5:
rm ~/.local/lib/python3.5/site-packages/[Package name].egg-link

其中[Package name]是导致问题的软件包。


谢谢!这仍然在将近四年后起作用了! - Rafael

16

如果在创建egg-link文件之后移动源代码目录,则会发生此问题。

您可以编辑正确的egg-link文件/home/daniel/envs/reviewboard-3.0/local/lib/python2.7/site-packages/ReviewBoard.egg-link,将行 /home/daniel/other-rb/reviewboard 替换为 /home/daniel/reviewboard ,然后重试。


5
您可以选择删除egg-info文件夹,然后运行pip install -r requirements.txt,这将把它添加到指定的位置。 - Ed Harrod
另一个egg-link路径:/usr/local/Cellar/python3/3.6.1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/[package].egg-link - ahuigo
1
我Ubuntu系统上有趣的路径是~/.local/lib/python3.5/site-packages - Martin Thoma

11

您可以通过在Python中运行优化模式-O来消除AssertionError,而且我们可以通过Python来运行pip模块,-m

$ python -O -m pip uninstall <pkg-name>

注意: 你可能需要验证 python -m pippip 是否相同。因为有时默认的Python和默认的pip会失去同步。

$ pip -V
pip 20.3.1 from /usr/lib/python3.9/site-packages/pip (python 3.9)
$ python -m pip -V
pip 20.3.1 from /usr/lib/python3.9/site-packages/pip (python 3.9)

运行 -O 卸载提示我删除 egg-link,就像 rm 一样。很好的直接替代方案。谢谢! - 0xDBFB7
使用 -O 运行可以跳过所有断言。不确定为什么 pip 包含这样的断言,但奇怪的是这样可以解决问题。 - Teque5
@Teque5 为什么你认为 pip 在执行危险操作之前不应该断言文件系统处于预期状态? - Peilonrayz
@Peilonrayz 用户尝试删除链接。该损坏链接的目标不存在。pip 应该 尝试删除链接,无论目标是否存在。强制使用错误断言会迫使我们去谷歌寻找解决方案,因此该断言不应存在。 - Teque5

2
如果您使用Python构建软件包
import glob
import os
import sys

def get_egg_file(module_name):
    def f(packages):
        return glob.glob(
            os.path.join(os.path.dirname(os.path.dirname(sys.executable)),
                         'lib', 'python*', packages, module_name + '.egg-link'))

    return f('site-packages') or f('dist-packages')


egg_file = get_egg_file('YOUR_PACKAGE_NAME')
if egg_file:
    os.remove(egg_file[0])

请注意,此操作应在目标虚拟环境或系统 Python 环境中执行,以便 sys.executable 解析为所需内容。

我不得不移除 python* 并传入我的解释器前缀 (sys.executable 的 dirpath),因为我正在使用 pexpect/wexpect 来自动更新许多虚拟环境,而不是在其中卸载东西。此外,我添加了一个新的参数来控制是否要删除 EGG 文件或 PTH 文件(因为如果存在两者都似乎需要删除)。 - nmz787

1

只需删除.tox文件夹即可。当您再次运行tox时,将生成一个新的.tox/目录,并具有正确的路径。


0
我通过将pip从6升级到9来解决了这个问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接