Questão Construindo Python 2.7.1 no Mac OS X, importando threading e uma exceção KeyError


Problema Original:

Eu estou construindo Python 2.7.1 no Mac OS X 10.6.7 e estou tendo problemas com um KeyError exceção sendo lançada a partir do threading módulo quando o Python é encerrado (provavelmente no atexit ligar).

Eu não consegui encontrar uma resposta adequada em nenhum lugar, e estou me perguntando se alguém aqui sabe qual é o problema e como talvez compilar / configurar o Python corretamente para evitar isso.

As etapas para produzir o erro são relativamente curtas:

echo "import threading" | ./python

Isso produz a seguinte saída:

Exception KeyError: KeyError(140735086161056,) in <module 'threading' from '/Users/danerik/quantumnotes/qw-control/quantumsource/external-libs/build/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/threading.pyc'> ignored

O erro é, com toda a probabilidade, inofensivo (não tive efeitos negativos), mas a mensagem é indesejável e eu preferiria que não estivesse presente.


1


origem




Respostas:


A compilação do python2.7 de MacPorts não tem esse problema. Você poderia simplesmente obtê-lo deles, ou tentar comparar seus flags de configuração para deles e veja o que difere.


0



A compilação do Homebrew também não sofre com isso ... Eu estive olhando para os sinalizadores de compilação deles e não consigo encontrar diferenças no script de configuração deles. Talvez eu esteja negligenciando alguma coisa ... - Dan
Eu descobri o meu problema - era uma questão de uma incompatibilidade de versão no Modules/main.c Arquivo. Eu estava misturando o código 2.6.1 com o código 2.7.1. - Dan
@ Dan feliz por ouvir isso. Vejo que você editou sua pergunta para incluir a correção também. Por aqui, seria mais natural adicionar a solução como resposta e depois marcá-la como "aceita", em vez de torná-la parte da questão. - blahdiblah
Tudo bem - eu vou fazer isso. Obrigado pela dica! Vai ter que esperar um pouco - como eu tenho menos de 100 em reputação, eu posso primeiro responder em 6 horas :) - Dan


O problema que eu experimentei foi que eu tinha um arquivo Modules / main.c personalizado de uma versão mais antiga do Python (2.6.1) poluindo minha versão 2.7.1. Apesar de quase idêntica, a principal diferença é que no arquivo 2.6.1 main.c havia um WaitForThreadShutdown(void) rotina que executaria operações se o módulo de threading tivesse sido importado. Um novo costume Modules/main.c O arquivo foi feito com base na nova versão 2.7.1, e isso resolveu meu problema.

Minha culpa.


0