Hacktoberfest 2026 : les issues que les mainteneurs ont marquées pour octobre, ouvertes et accessibles aux débutants. Parcourir les issues Hacktoberfest

boost::python::numpy causing python crash when numpy not installed

Ouverte
#285 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Évaluation

Difficulté
4/5
Temps estimé
3-5 jours
Accessibilité débutants
30/100
Type d'issue
Bug
Clarté
Plutôt claire
Activité
À l'abandon
Stack technique
cpp, numpy, python
Domaine
backend

Piste de recherche

Commencez par le point d’entrée BOOST_PYTHON_MODULE signalé et l’appel à np::initialize(), puis reproduisez l’importation en l’absence de numpy. Examinez comment l’initialisation de Boost.Python NumPy propage ModuleNotFoundError ou ImportError lors de l’importation de l’extension. C’est terminé lorsque l’échec peut être intercepté par Python au lieu d’entraîner l’arrêt de l’interpréteur.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

The following code causes python to exit (crash?) upon import when numpy is not installed. It looks like a ModuleNotFoundError does get thrown but it's not catchable and python simply exits. It's hard to tell if this is exit() being called or an actual crash. I would expect a catchable ModuleNotFoundError or ImportError to be thrown and python not to exit.

#define BOOST_PYTHON_STATIC_LIB
#define BOOST_NUMPY_STATIC_LIB
#include <boost/python.hpp>

#include <boost/python.hpp>
#include <boost/python/suite/indexing/vector_indexing_suite.hpp>
#include <boost/python/numpy.hpp>

namespace py = boost::python;
namespace np = boost::python::numpy;

template<class T>
np::ndarray to_numpy(const std::vector<T> &vec)
{
	Py_intptr_t shape[1] = { static_cast<Py_intptr_t>(vec.size()) };
	np::ndarray result = np::zeros(1, shape, np::dtype::get_builtin<T>());
	std::copy(vec.begin(), vec.end(), reinterpret_cast<T*>(result.get_data()));
	return result;
}

BOOST_PYTHON_MODULE(HelloBoostPython)
{
	np::initialize();

	py::class_<std::vector<double>>("DoubleVector")
		.def(py::init<size_t>())
		.def(py::init<size_t, const double&>())
		.def(py::vector_indexing_suite<std::vector<double>>())
		.def("to_numpy", to_numpy<double>)
		;
}

prompt:

(base) C:\Development\HelloBoostPython\Debug>python
Python 3.7.4 (default, Aug  9 2019, 18:22:51) [MSC v.1915 32 bit (Intel)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import HelloBoostPython
ModuleNotFoundError: No module named 'numpy'
ImportError: numpy.core._multiarray_umath failed to import

(base) C:\Development\HelloBoostPython\Debug>

If it matters, this is with boost 1.70 using visual studio 2017 to build.

Langage dominant
C++
Étoiles
537
Forks
223
Merge moyen
11 h 22 min
PR mergées (30 j)
2

Guide de contribution

Aucun guide de contribution indexé pour ce dépôt

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de boostorg/python

Toutes les issues de boostorg/python

Issues similaires

Plus d'issues C++

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.