我正在寻找一种解决方案,最好是干净且简单的,以启用hg convert
使用 SVN 存储库在 OS X 10.8 上工作。
目前,如果您尝试转换 SVN 存储库,您将得到一个could not load Subversion python bindings
error.
注意:Alex Martelli 在另一个答案中建议为 OS X 安装 CollabNet subversion 发行版,但似乎最新的 CollabNet 版本仍然无法在 OS X 10.8 上安装(安装程序锁定)。
使用自制软件
让它工作的最简单方法是安装subversion
从源头
使用homebrew http://brew.sh和--with-python
flag.
首先,确保您安装了命令行工具。与小牛队
和 Xcode 5,大多数命令如cc
即使命令行也可以工作
工具未完全安装。如果您没有/usr/include
目录,
那么首先你需要运行
$ xcode-select --install
安装命令行工具后,运行:
$ 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
您可以通过运行单元测试来测试绑定:
$ 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 进行调整并导致
单元测试失败;看西蒙·赖特对这个问题的回答 https://stackoverflow.com/a/21348716/14558.
这是
可以使用 Apple 版本的 subversion 源代码构建 Python 的 subversion 绑定。生成的模块
将完全兼容并链接到所有系统库。进而hg convert
就会起作用。
具体做法如下:
下载颠覆压缩包 http://www.opensource.apple.com/tarballs/subversion/subversion-52.tar.gz from opensource.apple.com http://www.opensource.apple.com/tarballs/
-
解压并配置它:
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 ../../.. \
-I ../../../include \
-I /usr/include/apr-1 \
-I libsvn_swig_py \
-I /System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 \
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: build egg test clean install
test: egg
mkdir -p tmp && cd tmp \
&& PYTHONPATH=../egg python -S -m svn.tests.run_all
DESTDIR=$(HOME)/Library/Python/2.7/lib/python/site-packages
install: 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 tests egg/svn
touch egg/svn/tests/__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
echo 'Version: 1.6.8' > egg/EGG-INFO/PKG-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) $(CFLAGS) -shared -dynamic libsvn_swig_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 libsvn_swig_py.dylib
$(CC) $(CFLAGS) -bundle $^ -o $@ $(LDFLAGS)
_%.so: %.c libsvn_swig_py.dylib
$(CC) $(CFLAGS) -bundle $^ -o $@ $(LDFLAGS)
clean:
rm -rf *.o *.so *.dylib *.dSYM
然后运行make
在该目录中。
如果单元测试在最后一步中通过,那么您现在就拥有了完整的功能
Python 绑定颠覆!跑步make install
如果你快乐,并且hg convert
将开始工作。
通常情况下,重写构建系统会更容易
从头开始,而不是弄清楚现有的。
Apple 和 Subversion 的所有脚本确实使事情变得复杂,但您真正需要做的就是复制.py
文件,使用公共代码构建共享库,然后构建每个 C 语言 Python 模块。确定要使用哪些包含文件和库很简单:尝试在没有任何包含或库的情况下开始构建它,当构建失败时,添加对导致构建失败的缺失包含路径或库的引用。棘手的部分是告诉 C 语言模块,例如_core.so
哪里可以找到常用代码的动态库。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)