如何在我的Python脚本中包含并链接pysvn?

1 投票
1 回答
3440 浏览
提问于 2025-04-16 22:19

我正在开发一个使用pysvn的工具。这个工具的前一个作者把pysvn1.4包含在里面,这样只要有Python,就可以在任何机器上使用,而不需要单独下载或安装pysvn。

我想把这个工具更新到使用pysvn 1.6版本。

到目前为止,我已经在我的电脑上安装了pysvn1.6,并把pysvn文件夹从我的/usr/lib/python/site-package/pysvn目录移动到了我的源文件目录,因为看起来前一个作者就是这么做的。

现在的文件结构如下:

assorted.py files
assorted.pyc files
pysvn folder that includes old version of pysvn
    __init__.py
    __init__.pyc
    __pysvn.so

但是,当我运行程序时,出现了这个错误:

Traceback (most recent call last):
  File "slocmine.py", line 195, in ?
    sys.exit(main(sys.argv[0:]))
  File "slocmine.py", line 113, in main
    logjsonstr = pyslocd_svn_log.doit(svn, url)
  File "/users/users1/chindes/newsloc/svn/lib/python2.4/pyslocd_svn_log.py", line 114, in doit
    revision=pysvn_rev_head, depth=pysvn.depth.empty)
AttributeError: 'module' object has no attribute 'empty'

这个错误源自之前有效的代码:

repoinfo = svn.info2(repoPathUrl,
    revision=pysvn_rev_head, depth=pysvn.depth.empty)

这让我觉得我可能没有正确导入这个模块,虽然我也可能错了。

补充:我发现我有pysvn的1.6.2版本和subversion的1.6.15版本,这两个版本显然不兼容。

1 个回答

3

pysvn这个模块的构建确实有点奇怪。下面是我成功构建和使用pysvn的方法。环境变量TARG被设置为Python的安装目录。

cd ~
wget http://pysvn.barrys-emacs.org/source_kits/pysvn-1.7.5.tar.gz
tar zxvf pysvn-1.7.5.tar.gz
cd pysvn-1.7.5/Source
python setup.py backport
python setup.py configure --apr-inc-dir=/usr/include/apr-1
make
cd ../Tests
make
cd ../Sources
mkdir -p $TARG/lib/python2.7/site-packages/pysvn
cp pysvn/__init__.py $TARG/lib/python2.7/site-packages/pysvn
cp pysvn/_pysvn_2_7.so $TARG/lib/python2.7/site-packages/pysvn
cd ~

如果你还保留着旧的模块,为什么不试着再运行一次呢?不过这次在引发错误的地方加上一些调试语句。你可以用diff来找到代码的正确位置,因为代码可能已经改动了。另一方面,你也可以直接尝试最新版本(见上面的脚本),因为这可能是库本身的一个错误。

撰写回答