Salut,
Lorsque j'écris : "from numpy import *" à partir du code et que j'exécute le code, l'erreur suivante s'affiche :
Traceback (most recent call last):
Fichier "rgbtoyuv.py", ligne 2, dans
importer numpy en tant que np
Fichier "/usr/local/lib/python3.5/site-packages/numpy-1.11.2-py3.5-linux-x86_64.egg/numpy/__init__.py", ligne 163, dans
de . importer au hasard
Fichier "/usr/local/lib/python3.5/site-packages/numpy-1.11.2-py3.5-linux-x86_64.egg/numpy/random/__init__.py", ligne 99, dans
à partir de l'importation .mtrand *
Erreur d'importation : /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 : symbole non défini : PyFPE_jbuf
Plateforme ubuntu16.04 x86_64
version python : 3.5.2
numpy version:1.11.2 et essayez également la version:1.9.0 , mais l'installation a échoué.
S'il vous plaît, aidez-moi à trouver la raison, merci beaucoup.
Où êtes-vous devenu numpy? BTW, des questions comme celle-ci devraient être posées sur la liste de diffusion, les problèmes de github sont pour les bogues
Cela ressemble à un rapport de bogue pour moi?
Quelques indices sur ce qui se passe ici :
CPython a du code facultatif pour attraper SIGFPE et le convertir en une exception. Pour l'utiliser, vous enveloppez les calculs à virgule flottante de niveau C dans PyFPE_START_PROTECT
/ PyFPE_END_PROTECT
. Si CPython a été compilé avec --with-fpectl
(ce qui correspond à un #define WANT_SIGFPE_HANDLER
dans pyconfig.h
), alors PyFPE_jbuf
est exporté en tant que symbole global, et ces macros se développent dans des trucs intelligents qui font référence à ce symbole. Si CPython a été compilé sans --with-fpectl
, le symbole n'est pas exporté et les macros deviennent no-ops. Cela signifie donc que CPython a en fait une ABI différente et incompatible selon qu'elle a été compilée avec ou sans --with-fpectl
. Joie.
(Il semble que vous puissiez vérifier quel type de CPython vous avez en faisant import fpectl
-- si cela réussit, vous avez un --with-fpectl
CPython.)
Numpy lui-même n'utilise pas ces macros. Mais le code généré automatiquement par Cython les utilise.
Conclusion : si vous compilez un module Cython à l'aide d'un CPython construit avec --with-fpectl
, il plantera lorsque vous essaierez de l'exécuter sur un CPython qui a été construit sans --with-fpectl
.
Vérification rapide de certaines versions courantes de Linux CPython pour voir celles qui utilisent --with-fpectl
:
@kevinzhai80 : Avez-vous par hasard créé numpy à partir des sources pour une raison quelconque, en utilisant le Python installé sur Ubuntu, puis avez-vous essayé de l'importer à partir d'un Python installé sur conda ?
Salut njsmith,
Merci pour vos informations, ce problème est résolu.
Merci njsmith. Aussi : Ubuntu 17.10 Artful no . La mise à niveau a causé l'erreur :
$ python
Python 2.7.14 (par défaut, 23 sept. 2017, 22:06:14)
[GCC 7.2.0] sur linux2
Tapez "aide", "droit d'auteur", "crédits" ou "licence" pour plus d'informations.
importer fpectl
Traceback (appel le plus récent en dernier) :
Déposer "", ligne 1, dans
ImportError : aucun module nommé fpectl
Commentaire le plus utile
Cela ressemble à un rapport de bogue pour moi?
Quelques indices sur ce qui se passe ici :
CPython a du code facultatif pour attraper SIGFPE et le convertir en une exception. Pour l'utiliser, vous enveloppez les calculs à virgule flottante de niveau C dans
PyFPE_START_PROTECT
/PyFPE_END_PROTECT
. Si CPython a été compilé avec--with-fpectl
(ce qui correspond à un#define WANT_SIGFPE_HANDLER
danspyconfig.h
), alorsPyFPE_jbuf
est exporté en tant que symbole global, et ces macros se développent dans des trucs intelligents qui font référence à ce symbole. Si CPython a été compilé sans--with-fpectl
, le symbole n'est pas exporté et les macros deviennent no-ops. Cela signifie donc que CPython a en fait une ABI différente et incompatible selon qu'elle a été compilée avec ou sans--with-fpectl
. Joie.(Il semble que vous puissiez vérifier quel type de CPython vous avez en faisant
import fpectl
-- si cela réussit, vous avez un--with-fpectl
CPython.)Numpy lui-même n'utilise pas ces macros. Mais le code généré automatiquement par Cython les utilise.
Conclusion : si vous compilez un module Cython à l'aide d'un CPython construit avec
--with-fpectl
, il plantera lorsque vous essaierez de l'exécuter sur un CPython qui a été construit sans--with-fpectl
.Vérification rapide de certaines versions courantes de Linux CPython pour voir celles qui utilisent
--with-fpectl
:@kevinzhai80 : Avez-vous par hasard créé numpy à partir des sources pour une raison quelconque, en utilisant le Python installé sur Ubuntu, puis avez-vous essayé de l'importer à partir d'un Python installé sur conda ?