Cython包装的C++ CAPN原库

pycapnp的Python项目详细描述


Pycapnp

可在http://jparyani.github.io/pycapnp/" rel="nofollow">http://jparyani.github.io/pycapnp/上获得更详细的文档。

要求

PyCAPNP的分布不超过C++ 11兼容的要求。 编译程序。GCC 4.8+或Clang 3.3+应该可以正常工作。

pycapnp还有其他的开发依赖项,包括cython和 P.试验请参阅requirements.txt以了解所有信息。

建筑和安装

使用pip install pycapnp安装。您可以设置cc环境 控制使用哪个编译器的变量,即 cc=gcc-4.8 pip安装pycapnp

或者你可以复制回购协议如下:

git clone https://github.com/jparyani/pycapnp.git
pip install --install-option '--force-cython' ./pycapnp

注意:对于OSX,如果使用Xcode 5中的clang,则可能需要设置 cflags 像这样:

CFLAGS='-stdlib=libc++' pip install pycapnp

如果您希望使用最新的上游C++CAPN原型:

pip install --install-option "--libcapnp-url" --install-option "https://github.com/sandstorm-io/capnproto/archive/master.tar.gz" --install-option "--force-bundled-libcapnp" .

python版本

支持Python2.7、Python3.4+和PyPy2.1+。

需要注意的一个奇怪之处是 文本 类型字段将被视为字节 python 2下的字符串和python 3下的unicode字符串。 数据 字段将始终被视为字节字符串。

开发

此项目使用 Git流 。 本质上,只要确保您在 开发中进行了更改 分支机构。您可以通过安装pytest来运行测试 pip安装py test ,然后从 测试运行 py.test 目录。

二进制软件包

构建哑二进制分布:

python setup.py bdist_dumb

构建python轮分布:

python setup.py bdist_wheel

如果它失败了 clang:错误:没有这样的文件或目录:"capnp/lib/capnp.cpp" ,然后 你得给拳头打圈。这可以通过以下方法完成:

python setup.py build --force-cython

文档/示例

有一些基本的文件 这里

examples目录中有一个例子很好地展示了pycapnp 很好地.在这里,复制:

from__future__importprint_functionimportosimportcapnpimportaddressbook_capnpdefwriteAddressBook(file):addresses=addressbook_capnp.AddressBook.new_message()people=addresses.init('people',2)alice=people[0]alice.id=123alice.name='Alice'alice.email='alice@example.com'alicePhones=alice.init('phones',1)alicePhones[0].number="555-1212"alicePhones[0].type='mobile'alice.employment.school="MIT"bob=people[1]bob.id=456bob.name='Bob'bob.email='bob@example.com'bobPhones=bob.init('phones',2)bobPhones[0].number="555-4567"bobPhones[0].type='home'bobPhones[1].number="555-7654"bobPhones[1].type='work'bob.employment.unemployed=Noneaddresses.write(file)defprintAddressBook(file):addresses=addressbook_capnp.AddressBook.read(file)forpersoninaddresses.people:print(person.name,':',person.email)forphoneinperson.phones:print(phone.type,':',phone.number)which=person.employment.which()print(which)ifwhich=='unemployed':print('unemployed')elifwhich=='employer':print('employer:',person.employment.employer)elifwhich=='school':print('student at:',person.employment.school)elifwhich=='selfEmployed':print('self employed')print()if__name__=='__main__':f=open('example','w')writeAddressBook(f)f=open('example','r')printAddressBook(f)

此外,pycapnp还获得了rpc特性,包括管道和 承诺式API。请参阅示例中的计算器示例 更好的演示目录:

importcapnpimportsocketimporttest_capability_capnpclassServer(test_capability_capnp.TestInterface.Server):def__init__(self,val=1):self.val=valdeffoo(self,i,j,**kwargs):returnstr(i*5+self.val)defserver(write_end):server=capnp.TwoPartyServer(write_end,bootstrap=Server(100))defclient(read_end):client=capnp.TwoPartyClient(read_end)cap=client.bootstrap()cap=cap.cast_as(test_capability_capnp.TestInterface)remote=cap.foo(i=5)response=remote.wait()assertresponse.x=='125'if__name__=='__main__':read_end,write_end=socket.socketpair(socket.AF_UNIX)# This is a toy example using socketpair.# In real situations, you can use any socket.server(write_end)client(read_end)

常见问题

如果您在安装时遇到如下错误:

...
gcc-4.8: error: capnp/capnp.c: No such file or directory

gcc-4.8: fatal error: no input files

那么你的setuptools版本太旧了。跑 pip install -u setuptools 然后重试。

构建状态

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
H2数据库抛出一般错误:“java.lang.IllegalStateException:无法读取位置2199023614787处的页面   java MySql对动态创建的表的查询   java如何交换两个整数包装器对象   java如何同时侦听命令行和2个传入连接   数据绑定JAVA Windows Builder自动绑定JLabel,并在TimerTask中更新bean   使用简单的代码在Java或Python上创建一个Hour Glass模式?   java在Velocity中写入Springbound映射   java在通过socket接收序列化对象时获取ClassNotFoundException   java双字段索引   java如何将可变字节数组传递给DLL函数(通过JNA访问)?   安卓 java。lang.RuntimeException:无法启动活动   删除正则表达式Java后面的所有字符   在Java GUI中旋转方形面板   java为什么“返回错误”只适用于异常?   java无法在Install4J中的选择捆绑包选项中找到JRE   java为什么我不断收到无法解析符号片段活动的错误?   java Javafx gui没有出现,其他一切运行正常   java让设备以编程方式连接到安卓中的同一wifi网络?   java如何在运行时获取“colorControlHighlight”属性的值?