Subversion Python绑定文档?

11 投票
4 回答
16392 浏览
提问于 2025-04-15 14:26

我在哪里可以找到一个关于使用Subversion Python绑定的好入门教程?

我在svnbook的一个章节中找到了相关内容;还有一些来自1.3的基本示例

有没有更全面和更新的资料呢?

4 个回答

1

这看起来是一个相当完整的文档:

http://pysvn.tigris.org/docs/pysvn_prog_ref.html

这里还有几个例子:

http://svn.apache.org/repos/asf/subversion/trunk/tools/examples/

2

如果你是从源代码构建Subversion的话,Subversion的Python绑定不会自动包含在内。你需要特别去构建并包含它们。幸运的是,你可以在安装完Subversion之后再进行这个操作。绑定的源代码已经包含在Subversion的源代码里。

这些说明是针对Red Hat Enterprise Linux上的Subversion 1.5.9和Python 2.4.3的,不过对于最近版本的Subversion和Python,以及其他通用的Unix安装,应该也能轻松调整。

首先,从这个链接下载swig:http://downloads.sourceforge.net/swig

tar -xvf swig-<version>.tar.gz
cd swig-<version>

在这个阶段,你需要做一个决定。你可以为所有支持的语言安装swig,或者只安装你需要的部分。运行'make check'可能会花费一个小时,且可能因为你不关心的语言出现错误而失败。

如果你想使用所有支持的语言,可以运行:

./configure 

如果你只想安装Python的部分,可以运行:

./configure --with-python=/usr/local/bin/python2.4 --without-perl --without-ruby --without-php4

接下来,运行:

make

如果你选择了完整安装,运行:

make -k check

如果你只关注Python,那么只需要运行Python的测试:

make check-python-examples
make check-python-test-suite

如果一切正常,你就可以安装swig了:

make install

从这里开始,安装Subversion的Python绑定应该相对简单:

tar -xvf subversion-1.5.9.tar.gz --gzip 
cd subversion-1.5.9
make swig-py
make install-swig-py
touch /usr/lib64/python2.4/site-packages/svn-python.pth
echo /usr/local/lib/svn-python > /usr/lib64/python2.4/site-packages/svn-python.pth

像往常一样,具体情况可能会因你的版本和系统架构而有所不同。祝你好运。

7

我想在这里补充一点说明。

感谢上面两位的回答(@BenjaminWohlwend@Logan),我了解到有不止一套Python与Subversion的接口;我在我的Ubuntu 11.04系统上做了以下操作:

$ apt-cache search '[Ss]vn|[Ss]ubversion' | grep -i python
python-svn - A(nother) Python interface to Subversion
python-svn-dbg - A(nother) Python interface to Subversion (debug extension)
python-subversion - Python bindings for Subversion
python-subversion-dbg - Python bindings for Subversion (debug extension)
python-opster - a python command line parsing speedster
python-py - Advanced Python testing tool and networking lib
python-rope - Python refactoring library
python-subvertpy - Alternative Python bindings for Subversion

可以查看Debian包的文件列表,以确定这些库指的是什么;所以我们有:

... 我还在仓库中发现了另一个:

链接 http://svn.apache.org/repos/asf/subversion(我从@BenjaminWohlwend那里得到的)显然是Apache软件基金会的Subversion源代码仓库。

提问者寻找文档似乎与python-subversion(或SWIG绑定(或libsvn)有关;其从源代码构建的说明在@Logan的帖子中。我在提问者提到的svn.developer: 使用API中找不到更好的文档来源,除了bindings/swig/python/README;它解释了SWIG如何从C生成Python接口:

翻译参数列表

SWIG绑定的参数减少法则大致如下:

- The module prefix can be omitted.  o:  

     void *some_C_function = svn_client_foo;  

  becomes:  

     import svn.client  
     func = svn.client.foo  

[...]

然后,可以查看,比如说svn/core.py,找到像svn_mergeinfo_merge这样的函数(和“明确定义的符号”);注意到core.py导入了libsvn.core - 这里的libsvn可能指的是从C文件libsvn_swig_py/swigutil_py.c构建的共享对象(.so)文件。

然后,我们可以查找svn_mergeinfo_merge,找到类似于SVNSearch: Subversion (commit 23570 05.03.2007)的提交信息,它提到了这个函数,以及svn_mergeinfo.h;进一步查找这个文件,我们在ASF仓库中找到了它:svn_mergeinfo.h,里面确实包含:

/** Like svn_mergeinfo_merge2, but uses only one pool.
 *
 * @deprecated Provided for backward compatibility with the 1.5 API.
 */
SVN_DEPRECATED
svn_error_t *
svn_mergeinfo_merge(svn_mergeinfo_t mergeinfo,
                    svn_mergeinfo_t changes,
                    apr_pool_t *pool);

看到DEPRECATED,这里可能需要提到svn提交:r1175903(2011年9月26日星期一)

  • subversion/libsvn_subr/mergeinfo.c

    (svn_mergeinfo_merge2): 新增。

    (svn_mergeinfo_merge): 移动到deprecated.c。

    (svn_mergeinfo_catalog_merge): 使用新的API。

也就是说 - 这个特定的函数在2011年被弃用了 - 所以希望你的Python SVN绑定和SVN安装能够匹配...

撰写回答