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

2024-05-13

我正在寻找一种解决方案,最好是干净且简单的,以启用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就会起作用。

具体做法如下:

  1. 下载颠覆压缩包 http://www.opensource.apple.com/tarballs/subversion/subversion-52.tar.gz from opensource.apple.com http://www.opensource.apple.com/tarballs/

  2. 解压并配置它:

    cd subversion-52/subversion && ./configure
    
  3. 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在该目录中。

  4. 如果单元测试在最后一步中通过,那么您现在就拥有了完整的功能 Python 绑定颠覆!跑步make install如果你快乐,并且hg convert将开始工作。


通常情况下,重写构建系统会更容易 从头开始,而不是弄清楚现有的。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Mac OS X 10.8 上安装 hg Convert 所需的 python subversion 绑定? 的相关文章

  • 将 saxon 与 python 结合使用

    我需要使用 python 处理 XSLT 目前我正在使用仅支持 XSLT 1 的 lxml 现在我需要处理 XSLT 2 有没有办法将 saxon XSLT 处理器与 python 一起使用 有两种可能的方法 设置一个 HTTP 服务 接受
  • 将 Matplotlib 误差线放置在不位于条形中心的位置

    我正在 Matplotlib 中生成带有错误栏的堆积条形图 不幸的是 某些层相对较小且数据多样 因此多个层的错误条可能重叠 从而使它们难以或无法读取 Example 有没有办法设置每个误差条的位置 即沿 x 轴移动它 以便重叠的线显示在彼此
  • 从字符串中删除识别的日期

    作为输入 我有几个包含不同格式日期的字符串 例如 彼得在16 45 我的生日是1990年7月8日 On 7 月 11 日星期六我会回家 I use dateutil parser parse识别字符串中的日期 在下一步中 我想从字符串中删除
  • 如何替换 pandas 数据框列中的重音符号

    我有一个数据框dataSwiss其中包含瑞士城市的信息 我想用普通字母替换带有重音符号的字母 这就是我正在做的 dataSwiss Municipality dataSwiss Municipality str encode utf 8 d
  • 以编程方式停止Python脚本的执行? [复制]

    这个问题在这里已经有答案了 是否可以使用命令在任意行停止执行 python 脚本 Like some code quit quit at this point some more code that s not executed sys e
  • Python pickle:腌制对象不等于源对象

    我认为这是预期的行为 但想检查一下 也许找出原因 因为我所做的研究结果是空白 我有一个函数可以提取数据 创建自定义类的新实例 然后将其附加到列表中 该类仅包含变量 然后 我使用协议 2 作为二进制文件将该列表腌制到文件中 稍后我重新运行脚本
  • AWS EMR Spark Python 日志记录

    我正在 AWS EMR 上运行一个非常简单的 Spark 作业 但似乎无法从我的脚本中获取任何日志输出 我尝试过打印到 stderr from pyspark import SparkContext import sys if name m
  • 如何使用Python创建历史时间线

    So I ve seen a few answers on here that helped a bit but my dataset is larger than the ones that have been answered prev
  • IO 密集型任务中的 Python 多线程

    建议仅在 IO 密集型任务中使用 Python 多线程 因为 Python 有一个全局解释器锁 GIL 只允许一个线程持有 Python 解释器的控制权 然而 多线程对于 IO 密集型操作有意义吗 https stackoverflow c
  • 核心数据 iCloud 同步中的关系完整性和验证

    考虑以下简单的实体模型 实体 A 与实体 B 具有一对一关系 称为b 实体 B 具有逆对一关系 称为a 这两种关系都不是可选的 A B b lt gt a 假设我们有两个设备 1 和 2 开始完全同步 每个对象都有一个 A 类对象和一个 B
  • TortoiseSVN 无法连接到 SlikSVN Subversion 服务器

    我已经在工作组中的一台计算机上创建了 SubVersion 服务器 从我的开发盒中 我可以毫无问题地访问存储库并签入 签出文件 我刚刚安装了 TortoiseSVN 无论我做什么 它都不会连接到服务器上的存储库 我收到臭名昭著的错误 无法建
  • 为什么 git-svn 应该积极搜索旧历史?

    当我运行 git svn clone s 时发生了一些奇怪的事情 尽管以下信息告诉我们不要惊慌 但我想知道为什么会出现这种 svn 错误 为什么这个路径不存在 是被别人删除了吗 如果是 为什么 git svn 应该积极搜索旧历史记录 Ini
  • 解释 Python 中的数字范围

    在 Pylons Web 应用程序中 我需要获取一个字符串 例如 关于如何做到这一点有什么建议吗 我是 Python 新手 我还没有找到任何可以帮助解决此类问题的东西 该列表将是 1 2 3 45 46 48 49 50 51 77 使用
  • 类型错误:预期单个张量时的张量列表 - 将 const 与 tf.random_normal 一起使用时

    我有以下 TensorFlow 代码 tf constant tf random normal time step batch size 1 1 我正进入 状态TypeError List of Tensors when single Te
  • git-svn 如何知道要提交到哪个分支?

    我的存储库是 SVN 我使用 git 进行所有开发 我们有一个标准布局 我用以下命令初始化了我的本地存储库git svn init s
  • 发送用户注册密码,django-allauth

    我在 django 应用程序上使用 django alluth 进行身份验证 注册 我需要创建一个自定义注册表单 其中只有一个字段 电子邮件 密码将在服务器上生成 这是我创建的表格 from django import forms from
  • 导入错误:没有名为 site 的模块 - mac

    我已经有这个问题几个月了 每次我想获取一个新的 python 包并使用它时 我都会在终端中收到此错误 ImportError No module named site 我不知道为什么会出现这个错误 实际上 我无法使用任何新软件包 因为每次我
  • Python Selenium:如何在文本文件中打印网站上的值?

    我正在尝试编写一个脚本 该脚本将从 tulsaspca org 网站获取以下 6 个值并将其打印在 txt 文件中 最终输出应该是 905 4896 7105 23194 1004 42000 放置的动物 的 HTML span class
  • 如何将输入读取为数字?

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 Why are x and y下面的代码中使用字符串而不是整数 注意 在Python 2
  • Statsmodels.formula.api OLS不显示截距的统计值

    我正在运行以下源代码 import statsmodels formula api as sm Add one column of ones for the intercept term X np append arr np ones 50

随机推荐