在virtualenv中发生奇怪的重定位错误:`python:relocation error:python:symbolØv l ⎼ Ø┴ ┌ ⎼ Ø┴ `(etc ...)

时间:2015-06-29 21:34:02

标签: python virtualenv corruption relocation

我遇到了一个非常神秘的错误,当我在virtualenv工作时间歇性地发生错误。

虽然现在已经发生了3-4次,但我发现很难找到能够重现问题的条件。它在执行完全不同的代码片段时发生,并且引发错误的同一段代码可能在错误之前和之后多次没有问题地执行。因此,对我来说,系统地缩小哪些库导致问题是不切实际的,所以如果我的描述看起来模糊或不完整,我会提前道歉。

症状

在IPython会话期间,我偶尔会遇到一个重定位错误,导致一个unicode乱码加载到我的终端。以下是最近出现问题时的终端输出:

In [435]: figs = clustering.make_plots(d[~d.dark_reared], which='dcentre_dangle')
Sliding median, window=10.00, 10116 x-values
     --> Completed: 00:05.17                                               
[Parallel(n_jobs=-1)]: Done   1 jobs       | elapsed:    4.8s
[Parallel(n_jobs=-1)]: Done   3 out of   8 | elapsed:    4.9s remaining:    8.1s
[Parallel(n_jobs=-1)]: Done   8 out of   8 | elapsed:    5.3s finished
/home/alistair/.venvs/rfmap/bin/python/home/alistair/.venvs/rfmap/bin/python: relocation error: /home/alistair/.venvs/rfmap/bin/python: symbol Øv�l��⎼�Ø┴�┌��⎼�Ø┴�┌��⎼�Ø┴�┌��⎼�é����▒└X⎽�▮���\������┴��6�⎼�Ø┴�┌��⎼�Ø┴�┌��⎼�Ø┴�┌��⎼�F��ޚ��7�┴�┌�
�⎼R�A?B�!���≤�├_←▮�┐O��°e�ǐ�┤!�=�'!F─┤�
                                       <b3±_�┴����⎼�Ø┴�┌��⎼�Ø┴�┌��⎼�Ø┴�┌��⎼�Ø┴�┌��⎼�é����▒└X⎽�▮���\������┴��6�⎼�Ø┴�┌��⎼�Ø┴�┌��⎼�Ø┴�┌��⎼�F��ޚ��7�┴�┌��⎼R�A?B�!���≤�├_←▮�┐O��°e�ǐ�┤!�=�'!F─┤�
                                                                                                                                                                                           <b3±_�┴����⎼�Ø┴�┌��⎼�Ø┴�┌��⎼�Ø┴�┌��⎼�Ø┴�┌��⎼�é����▒└
X⎽�▮���\������┴��6�⎼�Ø┴�┌��⎼�Ø┴�┌��⎼�Ø┴�┌��⎼�F��ޚ��7�┴�┌��⎼R�A?B�!���≤�├_←▮�┐O��°e�ǐ�┤!�=�'!F─┤�

...并且它继续这样几个页面。在这种情况下,错误并没有真正杀死我的IPython会话,虽然我的提示现在完全搞砸了:

I┼ [436]: ⎼e┌⎺▒d(c┌┤⎽├e⎼☃┼±)

大概和错误信息一起,一些包含控制字符的二进制数据必须被转储到终端中,因此都是乱码。

现在每当我尝试从同一个virtualenv中启动Python时,我都会看到类似的重定位错误:

(rfmap)alistair@MAGICPAVINGSLAB:~/src/python/rfmap_pipeline⟫ python
python: relocation error: python: symbol v�l��⎼�Ø┴�┌��⎼�Ø┴�┌��⎼�Ø┴�┌��⎼�é����▒└X⎽�▮���\������┴��6�⎼�Ø┴�┌��⎼�Ø┴�┌��⎼�Ø┴�┌��⎼�F��ޚ��7�┴�┌��⎼R�A?B�!���≤�├_←▮�┐O��°e�ǐ�┤!�=�'!F─┤�
                                                                                                                                                                               <b3±_�┴����⎼�Ø┴�┌��⎼�Ø┴�┌��⎼�Ø┴�┌��⎼�Ø┴�┌��⎼�Ø┴�┌��⎼�Ø┴�┌��⎼�Ø┴�┌��⎼�Ø┴�┌��⎼�Ø┴�┌��⎼�Ø┴�┌��⎼�Ø┴�┌��⎼�2≥��^Y�(߰⎻≠─�3�C�*��P≤U┼☃c⎺deUCS4_T⎼▒┼⎽┌▒├eC▒▒⎼└▒⎻← ┴e⎼⎽☃⎺┼ GLIBC_2↓2↓5 ┼⎺├ de°☃┼ed ☃┼ °☃┌e ┌☃bc↓⎽⎺↓6 ┬☃├▒ ┌☃┼┐ ├☃└e ⎼e°e⎼e┼ce
(⎼°└▒⎻)127 ▒┌☃⎽├▒☃⎼@MAGICPAVINGSLAB:·/⎽⎼c/⎻≤├▒⎺┼/⎼°└▒⎻_⎻☃⎻e┌☃┼e⟫ 

如果我停用此virtualenv或切换到另一个,Python可以正常工作。

恢复

前几次发生这种情况我只是删除了我的virtualenv并从头开始重建。我最终通过反复试验发现,我还可以通过重新初始化来恢复破碎的虚拟现实,即。

~$ virtualenv $VIRTUAL_ENV

$VIRTUAL_ENV/bin中创建一个新的Python二进制文件(以及为我提供pipsetuptools的新副本。

可能的原因?

重新初始化virtualenv这一事实解决了这个问题,这让我相信Python二进制文件本身已经被破坏了。虽然我发现健康副本和损坏副本之间的文件大小没有差异,但它们的MD5哈希确实不同。

之前有没有其他人遇到过这种错误?什么可能导致Python二进制文件被破坏?有问题的机器已完全稳定 - 我没有理由怀疑内存或磁盘错误,我在系统日志中找不到任何可疑的东西。

以下是一些可能相关的版本细节:

  • Ubuntu 15.04(3.19.0-21-generic)
  • python 2.7.9
  • virtualenv 1.11.6
  • virtualenvwrapper 4.3.1

更新

我尝试对损坏且未损坏的二进制文件进行区分,并发现0xD000和0xDFF0之间的字节块已被重复模式覆盖:

工作副本:

0000 CFC0: 65 74 67 72 6E 61 6D 00  67 65 74 67 72 67 69 64  etgrnam. getgrgid
0000 CFD0: 00 66 73 79 6E 63 00 67  65 74 68 6F 73 74 62 79  .fsync.g ethostby
0000 CFE0: 61 64 64 72 5F 72 00 5F  5F 68 5F 65 72 72 6E 6F  addr_r._ _h_errno
0000 CFF0: 5F 6C 6F 63 61 74 69 6F  6E 00 68 73 74 72 65 72  _locatio n.hstrer
0000 D000: 72 6F 72 00 67 65 74 68  6F 73 74 6E 61 6D 65 00  ror.geth ostname.
0000 D010: 67 65 74 70 77 6E 61 6D  00 73 65 74 75 69 64 00  getpwnam .setuid.
0000 D020: 75 74 69 6D 65 73 00 75  74 69 6D 65 00 73 79 73  utimes.u time.sys
0000 D030: 74 65 6D 00 73 74 72 63  6F 6C 6C 00 77 63 73 63  tem.strc oll.wcsc
0000 D040: 6F 6C 6C 00 61 73 63 74  69 6D 65 00 73 6F 63 6B  oll.asct ime.sock
0000 D050: 65 74 70 61 69 72 00 61  63 63 65 73 73 00 74 65  etpair.a ccess.te
0000 D060: 6D 70 6E 61 6D 00 74 6D  70 66 69 6C 65 36 34 00  mpnam.tm pfile64.
0000 D070: 74 6D 70 6E 61 6D 5F 72  00 66 63 68 64 69 72 00  tmpnam_r .fchdir.
0000 D080: 66 63 68 6D 6F 64 00 66  63 68 6F 77 6E 00 66 64  fchmod.f chown.fd
0000 D090: 61 74 61 73 79 6E 63 00  66 70 61 74 68 63 6F 6E  atasync. fpathcon
0000 D0A0: 66 00 66 73 74 61 74 76  66 73 36 34 00 74 63 67  f.fstatv fs64.tcg
0000 D0B0: 65 74 70 67 72 70 00 74  63 73 65 74 70 67 72 70  etpgrp.t csetpgrp
0000 D0C0: 00 74 74 79 6E 61 6D 65  00 73 65 74 65 67 69 64  .ttyname .setegid
0000 D0D0: 00 73 65 74 65 75 69 64  00 73 65 74 67 69 64 00  .seteuid .setgid.
0000 D0E0: 63 74 65 72 6D 69 64 00  67 65 74 6C 6F 61 64 61  ctermid. getloada
0000 D0F0: 76 67 00 67 65 74 67 72  6F 75 70 73 00 67 65 74  vg.getgr oups.get
0000 D100: 70 70 69 64 00 63 6F 6E  66 73 74 72 00 67 65 74  ppid.con fstr.get
0000 D110: 72 65 73 67 69 64 00 67  65 74 72 65 73 75 69 64  resgid.g etresuid
0000 D120: 00 69 6E 69 74 67 72 6F  75 70 73 00 67 65 74 70  .initgro ups.getp
0000 D130: 77 75 69 64 00 6C 63 68  6F 77 6E 00 73 65 74 72  wuid.lch own.setr
0000 D140: 65 73 67 69 64 00 73 65  74 72 65 73 75 69 64 00  esgid.se tresuid.
0000 D150: 61 6C 61 72 6D 00 73 65  74 70 77 65 6E 74 00 67  alarm.se tpwent.g
0000 D160: 65 74 70 77 65 6E 74 00  65 6E 64 70 77 65 6E 74  etpwent. endpwent
...

破损副本:

0000 CFC0: 65 74 67 72 6E 61 6D 00  67 65 74 67 72 67 69 64  etgrnam. getgrgid
0000 CFD0: 00 66 73 79 6E 63 00 67  65 74 68 6F 73 74 62 79  .fsync.g ethostby
0000 CFE0: 61 64 64 72 5F 72 00 5F  5F 68 5F 65 72 72 6E 6F  addr_r._ _h_errno
0000 CFF0: 5F 6C 6F 63 61 74 69 6F  6E 00 68 73 74 72 65 72  _locatio n.hstrer
0000 D000: BE 4A A4 0A 2A 17 AE 18  F9 91 B8 BF 27 5A D7 C9  .J..*... ....'Z..
0000 D010: 98 E5 4B E2 CB 76 84 D3  55 6C BB 8D 0E 72 A2 C3  ..K..v.. Ul...r..
0000 D020: 98 E5 4B E2 CB 76 84 D3  55 6C BB 8D 0E 72 A2 C3  ..K..v.. Ul...r..
0000 D030: 98 E5 4B E2 CB 76 84 D3  55 6C BB 8D 0E 72 A2 C3  ..K..v.. Ul...r..
0000 D040: 98 E5 4B E2 CB 76 84 D3  55 6C BB 8D 0E 72 A2 C3  ..K..v.. Ul...r..
0000 D050: 98 E5 4B E2 CB 76 84 D3  55 6C BB 8D 0E 72 A2 C3  ..K..v.. Ul...r..
0000 D060: 98 E5 4B E2 CB 76 84 D3  55 6C BB 8D 0E 72 A2 C3  ..K..v.. Ul...r..
0000 D070: 98 E5 4B E2 CB 76 84 D3  55 6C BB 8D 0E 72 A2 C3  ..K..v.. Ul...r..
0000 D080: A9 F9 A9 BE 8D 68 6D 58  73 1C 16 C2 E3 95 30 B4  .....hmX s.....0.
0000 D090: 95 96 D3 E0 EA 01 5C B7  CC CE 9C 86 AA AB E9 31  ......\. .......1
0000 D0A0: 98 E5 4B E2 CB 76 84 D3  55 BC 36 85 0E 72 A2 C3  ..K..v.. U.6..r..
0000 D0B0: 98 E5 4B E2 CB 76 84 D3  55 6C BB 8D 0E 72 A2 C3  ..K..v.. Ul...r..
0000 D0C0: 98 E5 4B E2 CB 76 84 D3  55 6C BB 8D 0E 72 A2 C3  ..K..v.. Ul...r..
0000 D0D0: 98 E5 4B E2 CB 76 84 D3  55 6C BB 8D 0E 72 A2 C3  ..K..v.. Ul...r..
0000 D0E0: EE C9 C4 46 D9 4F A6 04  D6 CB BF DE 9A 93 B4 37  ...F.O.. .......7
0000 D0F0: 98 E5 4B E2 CB 76 84 D3  55 6C BB 8D 0E 72 52 FC  ..K..v.. Ul...rR.
0000 D100: CA 59 41 3F 42 94 21 9B  89 80 79 9B 74 D3 1F 5F  .YA?B.!. ..y.t.._
0000 D110: 2C 30 AE 6B 1A 4F F7 B3  14 66 65 BE C7 90 BE 75  ,0.k.O.. .fe....u
0000 D120: 21 8D 3D 1C B6 27 E0 49  15 F3 98 35 21 46 E9 AE  !.=..'.I ...5!F..
0000 D130: D6 71 75 B4 07 0B 3C 62  33 D2 DE 02 67 5F C3 D3  .qu...<b 3...g_..
0000 D140: 98 E5 4B E2 CB 76 84 D3  2A 93 BB 8D 0E 72 A2 C3  ..K..v.. *....r..
0000 D150: 98 E5 4B E2 CB 76 84 D3  55 6C BB 8D 0E 72 A2 C3  ..K..v.. Ul...r..
0000 D160: 98 E5 4B E2 CB 76 84 D3  55 6C BB 8D 0E 72 A2 C3  ..K..v.. Ul...r..
...

我真的不知道如何进一步解释这一点,但似乎位置和模式可能是线索。

0 个答案:

没有答案