我正在编写一个Cython包装器,我想把它作为一个Python包分发给C++库。我已经为我的包设计了一个类似这样的虚拟版本(完整源代码here)。在
$ tree
.
├── bogus.pyx
├── inc
│ └── bogus.hpp
├── setup.py
└── src
└── bogus.cpp
$
$ cat inc/bogus.hpp
#ifndef BOGUS
#define BOGUS
class bogus
{
protected:
int data;
public:
bogus();
int get_double(int value);
};
#endif
$
$ cat src/bogus.cpp
#include "bogus.hpp"
bogus::bogus() : data(0)
{
}
int bogus::get_double(int value)
{
data = value * 2;
return data;
}
$ cat bogus.pyx
# distutils: language = c++
# distutils: sources = src/bogus.cpp
# cython: c_string_type=str, c_string_encoding=ascii
cdef extern from 'bogus.hpp':
cdef cppclass bogus:
bogus() except +
int get_double(int value)
cdef class Bogus:
cdef bogus b
def get_double(self, int value):
return self.b.get_double(value)
通过下面的setup.py
文件,我可以确认库是否正确地安装了python setup.py install
,并且工作正常。在
<;兰特>
对此进行故障排除后发现了一个极其复杂且不一致的文档、建议和黑客攻击,这些都不适合我。在graft
行中放入MANIFEST.in
?不。package_data
或{
<;/rant>
简短回答
将
include inc/*.hpp
放入MANIFEST.in
文件中。在冗长的回答
基于各种博客文章和其他帖子,我尝试过在
MANIFEST.in
文件中声明文件的建议。在these instructions之后,我向graft inc/
添加了一个graft inc/
行,以包含整个目录。这没用。在但是,用
include inc/*.hpp
替换这一行确实有效。可以说这应该是我尝试的第一件事,但是由于不熟悉setuptools和distutil的复杂性和缺点,我没有理由期望graft
不会起作用。在相关问题 更多 >
编程相关推荐