Python环境构建 ================ Python编译相关 -------------- 动态扩展加载: HAVE_DYNAMIC_LOADING 添加package到标准库,也就是在Lib目录下建子目录需要修改Makefile.pre.in。 将目录路径添加到LIBSUBDIRS变量中。 1. Python代码中调用Python函数。 2. Python代码中调用C函数。 3. C代码中调用Python函数。 :: struct wrapperbase { char *name; int offset; void *function; wrapperfunc wrapper; char *doc; int flags; PyObject *name_strobj; }; typedef struct wrapperbase slotdef; 设置断点 import pdb; pdb.set_trace() raise distutils ---------- export DISTUTILS_DEBUG=1 http://www.ibm.com/developerworks/linux/library/l-dynamic-libraries/ http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html PYTHONHOME: Change the location of the standard Python libraries. PYTHONPATH: 这个变量会prepend到sys.path中。 http://docs.python.org/using/cmdline.html#environment-variables --enable-shared 对于--enable-shared编译出来的python executable,其运行时需要知道: 1. python2.6.so的位置。 python excutable里只有一个main函数,只是一个空壳,负责调用Py_Main。真正的入 Py_Main在python2.6.so里。 $ echo $prefix > ld.so.conf.d/python$version.so.conf 2. 标准库的位置。 默认为os.path.join(sys.prefix, 'lib/python') :: >>> import pprint >>> import dist.sysconfig >>> pprint.pprint(dist.sysconfig.get_config_vars()) 这些sysconfig是从$prefix/lib/python$version/config/下的Makefile等中解析出来的。 Python/sysmodule.c -> sys module Modules/getpath.c中的caculate_path函数。 $prefix/lib/python$version/site.py 如何使用setuptools为阉割版(无法import subprocess)的python安装包? :: xpython ============= #!/path/to/nornmal/python SAE_PYTHON_PREFIX = '目标python的sys.prefix' distutils.sysconfig.PREFIX = SAE_PYTHON_PREFIX distutils.sysconfig.EXEC_PREFIX = SAE_PYTHON_PREFIX # Default installation place sys.prefix = SAE_PYTHON_PREFIX sys.exec_prefix = SAE_PYTHON_PREFIX # some package use these variable sys.path[0] = os.getcwd() __file__ = os.path.abspath(sys.argv[1]) import pprint pprint.pprint(distutils.sysconfig.get_config_vars()) # Pop current script name sys.argv.pop(0) execfile(sys.argv[0]) 最后执行xpython setup.py install搞定! 上面执行xpython用的正常版的python最好是静态编译,省很多事阿。