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

2024-10-03 11:19:46 发布

您现在位置:Python中文网/ 问答频道 /正文

当我在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会话,尽管我的提示现在完全搞乱了:

^{2}$

可能是伴随着错误消息,一些包含控制字符的二进制数据一定被转储到了终端,因此所有的胡言乱语。在

现在,每当我尝试从同一个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或切换到另一个virtualenv,Python可以正常工作。在

恢复

最初的几次,我只是删除了我的virtualenv,然后从头开始重新构建它。我最终通过反复试验发现,我也可以通过重新初始化来恢复损坏的virtualenv,即

~$ virtualenv $VIRTUAL_ENV

它在$VIRTUAL_ENV/bin中创建一个新的Python二进制文件(同时给我pipsetuptools的新副本)。在

可能的原因?在

重新初始化virtualenv修复了这个问题,这使我相信Python二进制文件本身正在某种程度上被破坏。虽然我看不出正常副本和损坏副本的文件大小有什么区别,但它们的MD5哈希值确实不同。在

以前有人遇到过这种错误吗?什么可能导致Python二进制文件损坏?有问题的机器在其他方面是完全稳定的-我没有理由怀疑内存或磁盘错误,我也没有发现任何可疑的系统日志。在

以下是一些可能相关的版本详细信息:

  • Ubuntu 15.04(3.19.0-21-通用)
  • python 2.7.9
  • virtualenv 1.11.6版
  • VirtualEnvrapper 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..
...

我真的不知道有足够的知识来进一步解释这一点,但似乎地点和模式可能是线索。在


Tags: a2virtualenv错误二进制jobs副本uld3