Oi,
Quando escrevo: "from numpy import *" do código e executo o código, encontro o seguinte erro:
Traceback (most recent call last):
Arquivo "rgbtoyuv.py", linha 2, em
importar numpy como np
Arquivo "/usr/local/lib/python3.5/site-packages/numpy-1.11.2-py3.5-linux-x86_64.egg/numpy/__init__.py", linha 163, em
a partir de . importar aleatório
Arquivo "/usr/local/lib/python3.5/site-packages/numpy-1.11.2-py3.5-linux-x86_64.egg/numpy/random/__init__.py", linha 99, em
from .mtrand import *
ImportError: /usr/local/lib/python3.5/site-packages/numpy-1.11.2-py3.5-linux-x86_64.egg/numpy/random/mtrand.cpython-35m-x86_64-linux-gnu.so : símbolo indefinido: PyFPE_jbuf
Plataforma ubuntu16.04 x86_64
versão python: 3.5.2
versão numpy versão: 1.9.0 também, mas a instalação falhou.
Por favor me ajude a encontrar o motivo, muito obrigado.
Onde você ficou entorpecido? A propósito, perguntas como essa devem ser feitas na lista de e-mails, questões do github são para bugs
Parece um relatório de bug para mim?
Algumas pistas sobre o que está acontecendo aqui:
CPython possui algum código opcional para capturar SIGFPE e convertê-lo em uma exceção. Para usá-lo, você envolve cálculos de ponto flutuante de nível C em PyFPE_START_PROTECT
/ PyFPE_END_PROTECT
. Se CPython foi compilado com --with-fpectl
(que corresponde a ter #define WANT_SIGFPE_HANDLER
em pyconfig.h
), então PyFPE_jbuf
é exportado como um símbolo global e essas macros se expandem em algumas coisas inteligentes que fazem referência a este símbolo. Se CPython foi compilado sem --with-fpectl
, então o símbolo não é exportado e as macros se tornam autônomas. Portanto, isso significa que o CPython tem, na verdade, um ABI diferente e incompatível, dependendo se foi compilado com ou sem --with-fpectl
. Alegria.
(Parece que você pode verificar que tipo de CPython você tem fazendo import fpectl
- se for bem-sucedido, você tem um --with-fpectl
CPython.)
O Numpy em si não usa essas macros. Mas o código gerado automaticamente pelo Cython os usa.
Conclusão: se você compilar um módulo Cython usando um CPython que foi construído com --with-fpectl
, ele travará quando você tentar executá-lo em um CPython que foi construído sem --with-fpectl
.
Verificação rápida de algumas compilações CPython Linux comuns para ver quais usam --with-fpectl
:
@ kevinzhai80 : Você por acaso construiu numpy a partir do código-fonte por algum motivo, usando o Python instalado no Ubuntu, e depois tentou importá-lo de um Python instalado pelo conda?
Olá njsmith,
Obrigado pela sua informação, este problema foi resolvido.
Obrigado njsmith. Também: Ubuntu 17.10 Artful no . A atualização causou o erro:
$ python
Python 2.7.14 (padrão, 23 de setembro de 2017, 22:06:14)
[GCC 7.2.0] no linux2
Digite "ajuda", "direitos autorais", "créditos" ou "licença" para obter mais informações.
importar fpectl
Traceback (última chamada mais recente):
Arquivo "", linha 1, em
ImportError: Nenhum módulo denominado fpectl
Comentários muito úteis
Parece um relatório de bug para mim?
Algumas pistas sobre o que está acontecendo aqui:
CPython possui algum código opcional para capturar SIGFPE e convertê-lo em uma exceção. Para usá-lo, você envolve cálculos de ponto flutuante de nível C em
PyFPE_START_PROTECT
/PyFPE_END_PROTECT
. Se CPython foi compilado com--with-fpectl
(que corresponde a ter#define WANT_SIGFPE_HANDLER
empyconfig.h
), entãoPyFPE_jbuf
é exportado como um símbolo global e essas macros se expandem em algumas coisas inteligentes que fazem referência a este símbolo. Se CPython foi compilado sem--with-fpectl
, então o símbolo não é exportado e as macros se tornam autônomas. Portanto, isso significa que o CPython tem, na verdade, um ABI diferente e incompatível, dependendo se foi compilado com ou sem--with-fpectl
. Alegria.(Parece que você pode verificar que tipo de CPython você tem fazendo
import fpectl
- se for bem-sucedido, você tem um--with-fpectl
CPython.)O Numpy em si não usa essas macros. Mas o código gerado automaticamente pelo Cython os usa.
Conclusão: se você compilar um módulo Cython usando um CPython que foi construído com
--with-fpectl
, ele travará quando você tentar executá-lo em um CPython que foi construído sem--with-fpectl
.Verificação rápida de algumas compilações CPython Linux comuns para ver quais usam
--with-fpectl
:@ kevinzhai80 : Você por acaso construiu numpy a partir do código-fonte por algum motivo, usando o Python instalado no Ubuntu, e depois tentou importá-lo de um Python instalado pelo conda?