2016-10-09 3 views
1

나는 cpython 상자를 사용하여 파이썬 모듈을 만들 수있는 몇 가지 자습서를 볼 수 있지만 만들 때 여전히 오류가했습니다다른 크레이트에 정의 된 매크로는 어떻게 사용합니까?

extern crate cpython; 

use cpython::{PyObject, PyResult, Python, PyTuple, PyDict, ToPyObject, PythonObject}; 

fn add_two(py: Python, args: &PyTuple, _: Option<&PyDict>) -> PyResult<PyObject> { 
    match args.as_slice() { 
     [ref a_obj, ref b_obj] => { 
      let a = a_obj.extract::<i32>(py).unwrap(); 
      let b = b_obj.extract::<i32>(py).unwrap(); 
      let mut acc:i32 = 0; 

      for _ in 0..1000 { 
       acc += a + b; 
      } 

      Ok(acc.to_py_object(py).into_object()) 
     }, 
     _ => Ok(py.None()) 
    } 
} 

py_module_initializer!(example, |py, module| { 
    try!(module.add(py, "add_two", py_fn!(add_two))); 
    Ok(()) 
}); 

내가 얻을 :

error: macro undefined: 'py_module_initializer!' 

내가 그것을 어디에서받을 수 있나요? 녹 1.12를 사용하고 있습니다.


UPD

  1. 필요 기타 오류의 경우 (답변에서와 같이) #[macro_use]
  2. 를 추가 - examples here
+0

scan!()을 사용하여 u8을 읽을 때 [매크로가 정의되지 않음] 가능한 복제본 (http://stackoverflow.com/questions/38396104/macro-undefined-when-reading-u8-using-scan) – mcarton

답변

4

당신은 아마 다음과 같이 cpython를 선언해야합니다

#[macro_use] extern crate cpython; 

cpython의 매크로를 사용할 수있게합니다. the example in its docs으로 문의하십시오.

2

당신은 extern crate 선언에 #[macro_use] 속성을 추가해야합니다 참조 크레이트 i에서 내 보낸 매크로 가져 오기 너의 나무 상자 네임 스페이스.

#[macro_use] 
extern crate cpython; 
관련 문제