发布
社区首页 >问答首页 >如何在Mac OS X 10.8上安装hg convert所需的python subversion绑定?

如何在Mac OS X 10.8上安装hg convert所需的python subversion绑定?
EN

Stack Overflow用户
提问于 2013-01-26 23:40:07
回答 4查看 3.1K关注 0票数 5

我正在寻找一种解决方案,最好是干净和简单,使hg convert能够在带有SVN存储库的OSX10.8上工作。

目前,如果你尝试转换一个SVN仓库,你会得到一个could not load Subversion python bindings错误。

注: Alex Martelli在另一个答案中建议为OS X安装CollabNet subversion发行版,但似乎最新的CollabNet版本不能安装在OS X 10.8上(安装程序锁定)。

EN

回答 4

Stack Overflow用户

发布于 2013-06-06 06:12:04

使用自制软件

最简单的方法是使用homebrew--with-python标志从源代码安装subversion

首先,确保安装了命令行工具。在Mavericks和Xcode5中,即使命令行工具没有完全安装,像cc这样的大多数命令也能正常工作。如果没有/usr/include目录,那么首先需要运行

代码语言:javascript
代码运行次数:0
复制
$ xcode-select --install

安装命令行工具后,运行:

代码语言:javascript
代码运行次数:0
复制
$ brew install subversion --with-python
$ mkdir -p ~/Library/Python/2.7/lib/python/site-packages
$ echo $(brew --cellar)/subversion/1.8.5/lib/svn-python \
    > ~/Library/Python/2.7/lib/python/site-packages/svn.pth

您可以通过运行单元测试来测试绑定:

代码语言:javascript
代码运行次数:0
复制
$ svn co http://svn.apache.org/repos/asf/subversion/tags/1.8.5/subversion/bindings/swig/python/tests
$ cd tests && python run_all.py

使用Apple的源代码

这适用于Mountain Lion,但需要对Mavericks进行调整,并导致单元测试失败;请参阅Simon Wright’s answer to this question

可以使用Apple版本的subversion源代码构建Python的subversion绑定。生成的模块将完全兼容并链接到所有系统库。然后hg convert就能正常工作了。

下面是如何做的:

opensource.apple.com

  • Unpack
  1. 下载subversion tarball并对其进行配置:

cd subversion-52/subversion && ./configure

  • In subversion/bindings/swig/python,添加此Makefile,确保将前导空格更改为制表符:

SHELL = /bin/bash -eu CC = gcc -g -O2 CFLAGS = -DDARWIN -DSIGPROCMASK_SETS_THREAD_MASK \ -I ../proxy \ -I ../../..\lib../include\ -I /usr/include/apr-1 \ -I libsvn_swig_py \ -I lib\ LDFLAGS =\ /System/Library/Frameworks/Python.framework/Versions/2.7/lib/libpython2.7.dylib \ /usr/lib/libsvn_*-1.0.dylib \/usr/lib/libapr-1.dylib \ .PHONY:构建DESTDIR=$(HOME)/Library/Python/2.7/lib/python/site-packages测试干净安装测试: egg mkdir -p tmp && cd tmp \ && PYTHONPATH=../egg python -S -m svn.tests.run_all 1.dylib安装: egg mkdir -p "${DESTDIR}“rm -rf "$(DESTDIR)/svn.egg”cp -R egg "$(DESTDIR)/svn.egg“echo './svn.egg‘> "$(DESTDIR)/svn.pth”egg: build rm -rf egg mkdir egg cp -R svn egg cp -R测试egg/svn touch egg/svn/-R/__init__.py mkdir egg/libsvn cp *.py egg/libsvn cp *.so *.dylib egg/libsvn # https://blogs.oracle.com/dipol/entry/dynamic_libraries_rpath_and_mac for F in egg/libsvn/*.so;do \ install_name_tool -change libsvn_swig_py.dylib \ '@loader_path/libsvn_swig_py.dylib‘"$$F";\ done strip -x egg/libsvn/*.so touch egg/libsvn/__init__.py mkdir -p egg/EGG-INFO‘版本: 1.6.8’>EGG/EGG-INFO build: libsvn_swig_py.dylib _client.so _core.so _delta.so _diff.so _fs.so _ra.so _repos.so _wc.so libsvn_swig_py.dylib:$(CC) $(文件标签) -shared -dynamic libsvn_swigutil_py/swigutil_py.c -o $@ $(LDFLAGS) _client.so: svn_client.c _core.so: core.c _delta.so: svn_delta.c _diff.so: svn_diff.c _fs.so: svn_fs.c _repos.so: svn_repos.c _wc.so: svn_wc.c _%.so: svn_%.c $(CC) $(CFLAGS) -bundle $^ -o $@ $(LDFLAGS) _%.so:%.c libsvn_swig_py.dylib $(CC) $(CFLAGS) -bundle $^ -o $@ $(LDFLAGS) clean: rm -rf *.o *.so *.dylib *.dSYM

然后在上一步中通过单元测试的directory.

  • If中运行make,您现在就拥有了subversion的全功能Python绑定!如果你愿意,就运行make installhg convert就会开始工作。

与通常的情况一样,从头开始重写构建系统要比弄清楚现有的构建系统更容易。

来自苹果和Subversion的所有脚本都使它变得复杂,但您真正需要做的就是复制.py文件,使用公共代码构建一个共享库,然后构建每个C语言Python模块。确定要使用哪些包含文件和库很简单:尝试在不包含任何包含或库的情况下开始构建,当构建失败时,添加对导致构建失败的缺少的包含路径或库的引用。棘手的部分是告诉像_core.so这样的C语言模块在哪里可以找到通用代码的动态库。

票数 15
EN

Stack Overflow用户

发布于 2013-06-27 12:37:54

使用来自MacPorts的hg,我需要sudo port install subversion-python27bindings

票数 1
EN

Stack Overflow用户

发布于 2014-01-25 17:13:18

这是小牛对上面andrewdotn's answer的更新。

例如,在Mavericks下,/usr/lib (标准位置)中唯一的SVN动态库是/usr/lib/libsvn_client-1.0.0.0.dylib。这个库的内部名称(使用otool -L查找)告诉动态加载器查找libsvn_client-1.0.dylib。通常情况下,这也会在/usr/lib中作为指向真实库的符号链接。

试试这个:

  1. 在andrewdotn的Makefile中,将LDFLAGS (第二行)编辑为

/Library/Developer/CommandLineTools/usr/lib/libsvn_*-1.0.dylib \

  • Set DYLD_LIBRARY_PATH

导出DYLD_LIBRARY_PATH=/Library/Developer/CommandLineTools/usr/lib

然后是make。我得到了两个错误:

代码语言:javascript
代码运行次数:0
复制
======================================================================
ERROR: test_get_pristine_copy_path (svn.tests.wc.SubversionWorkingCopyTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "../egg/svn/tests/wc.py", line 192, in test_get_pristine_copy_path
    self.assertEqual(path_to_text_base, wc.get_pristine_copy_path(path_to_file))
  File "../egg/libsvn/wc.py", line 2447, in svn_wc_get_pristine_copy_path
    return apply(_wc.svn_wc_get_pristine_copy_path, args)
SubversionException: ("The node '/var/folders/_q/fvnxz46903z9hjh38fz0lyhm0000gs/T/tmp7vMRZu/foo' was not found.", 155010)

======================================================================
ERROR: test_lock (svn.tests.wc.SubversionWorkingCopyTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "../egg/svn/tests/wc.py", line 48, in test_lock
    lock = wc.add_lock(self.path, core.svn_lock_create(core.Pool()), self.wc)
  File "../egg/libsvn/wc.py", line 2601, in svn_wc_add_lock
    return apply(_wc.svn_wc_add_lock, args)
SubversionException: ('sqlite: LOCK.lock_token may not be NULL', 200035)

----------------------------------------------------------------------

但我还是安装了,hg convert运行得很好。

我怀疑您每次需要运行hg convert时都需要像上面那样设置DYLD_LIBRARY_PATH;希望不是那么频繁!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14538468

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档