Hacktoberfest 2026:維護者為十月標記出來的 issue,仍然開放、適合新手。 瀏覽 Hacktoberfest issue

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

未關閉
#285 0 則留言 0 個 reaction 已指派 0 人 在 GitHub 檢視

還沒有人認領這個 Issue。

評估

難度
4/5
預估耗時
3-5 天
新手友好度
30/100
Issue 類型
缺陷
描述清晰度
基本清楚
活躍度
停滯
技術堆疊
cpp, numpy, python
領域
backend

研究方向

從報告的 BOOST_PYTHON_MODULE 進入點和 np::initialize() 呼叫開始,然後在缺少 numpy 的情況下重現匯入。檢查 Boost.Python NumPy 初始化如何在擴充功能匯入期間傳播 ModuleNotFoundError 或 ImportError。完成的標準是該失敗可以由 Python 捕捉,而不是終止直譯器。

由索引模型根據 Issue 內容生成。

描述

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.

主要語言
C++
星號
537
分支
223
平均合併
11 小時 22 分鐘
30 天內合併 PR
2

貢獻指南

這個儲存庫沒有索引到貢獻指南

從這裡開始

  1. 先讀完整個 Issue,再讀專案的貢獻指南。
  2. 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
  3. Fork 儲存庫,在一個分支上完成修改。
  4. 送出 Pull Request,並在描述裡引用這個 Issue 編號。

boostorg/python 的其他 Issue

查看 boostorg/python 的全部 Issue

相似的 Issue

更多 C++ Issue

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。