在C中嵌入python笔记
使用Python C API在C中嵌入Python非常简单, 提供的API也很优雅。 在入门时可能会遇到几个问题, 作个笔记。
当然,这在网上可以找到些例子,其实这些例子都是一个样的,天下文章一大抄。还有就是有不少网友说python很慢,我就不太相信了,不知道这些同学有没有自己测试过,还是有一两个恶搞的家伙说了一下就人云亦云的三人成虎了。这个不好下结论,别人喜欢用什么自己也管不,还是按兴趣吧。
首先在配置IDE,把Python安装目录下的include,libs分别添加到工程的include,lib搜索目录当中,否则可能会出现找不到Python.h或者python25.lib的情况。
之后按照书中介绍的代码敲了一遍,编辑通过,但连接的时候却提示unresolved external symbol __imp___Py_Dealloc,这就是因为在Debug模式下编译器会寻找Python的debug版本的lib,但我们在网上下载的是release版本肯定没有了,这时可以取消debug模式,如下:
#ifdef _DEBUG
#undef _DEBUG
#include <Python.h>
#define _DEBUG
#else
#include <Python.h>
#endif
现在编译连接都OK了,但运行中如果通过PyImport_Import加载一个模块失败,就应该查查有没有把要加载的py模块文件拷到生成的exe文件同一个目录下了,如果含有语法错误之类的话也会导致加载失败,最好先自己在python命令行下尝试一下。
在调用python函数时是有好几个不同的,具体的差别还有待学习,这里就看了两个。
PyObject* PyObject_CallObject( PyObject *callable_object, PyObject *args)
已经获得了一个可以调用的python对象,比如一个函数,提供一个元组格式的参数调用,元组里面是按顺序的参数,apply(callable_object, args) 或者callable_object(*args)。
PyObject* PyObject_CallMethod( PyObject *o, char *method, char *format, ...)
调用一个对象里的一个函数,相当于python语法的o.method(args),其中的格式format可以参照文档里Py_BuildValue的参数。
呵呵,期待更多资料分享。。。
python2.6.5
我测试用helloworld,但是上传不上去。。。我是用launcher deploy
网上查不到 set HTTP_PROXY set HTTPS_PROXY 这个怎么设置呢?
2010-06-14 21:03:36 Running command: "['C:\\Python26\\pythonw.exe', 'C:\\Program Files\\Google\\google_appengine\\appcfg.py', '--no_cookies', u'--email=zhengzanzan@gmail.com', '--passin', 'update', u'D:\\helloworld']"
C:\Program Files\Google\google_appengine\appcfg.py:41: DeprecationWarning: the sha module is deprecated; use the hashlib module instead
os.path.join(DIR_PATH, 'lib', 'antlr3'),
C:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver_login.py:33: DeprecationWarning: the md5 module is deprecated; use hashlib instead
import md5
Application: lostin502; version: 1.
Server: appengine.google.com.
Scanning files on local disk.
Initiating update.
2010-06-14 21:03:39,061 ERROR appcfg.py:1568 An unexpected error occurred. Aborting.
Traceback (most recent call last):
File "C:\Program Files\Google\google_appengine\google\appengine\tools\appcfg.py", line 1535, in DoUpload
missing_files = self.Begin()
File "C:\Program Files\Google\google_appengine\google\appengine\tools\appcfg.py", line 1305, in Begin
version=self.version, payload=self.config.ToYAML())
File "C:\Program Files\Google\google_appengine\google\appengine\tools\appengine_rpc.py", line 346, in Send
f = self.opener.open(req)
File "C:\Python26\lib\urllib2.py", line 391, in open
response = self._open(req, data)
File "C:\Python26\lib\urllib2.py", line 409, in _open
'_open', req)
File "C:\Python26\lib\urllib2.py", line 369, in _call_chain
result = func(*args)
File "C:\Program Files\Google\google_appengine\google\appengine\tools\https_wrapper.py", line 136, in https_open
return self.do_open(http_class_wrapper, req)
File "C:\Python26\lib\urllib2.py", line 1136, in do_open