我想我快疯了。我只想在macbook上的python中安装pygit2,这样我就可以开始工作了。然而,这并没有动摇,我一整天都在尝试设置它。
我应该按照下面的指示:
http://www.pygit2.org/install.html#how-to-install
我已经尝试了无数的东西,与rpath混在一起,因为显然在macs上,这是不同的实现方式:
如何在Mac下与gcc一起设置可执行文件的运行时路径(-rpath)?
..。还有无数的其他变体,我只是在这一点上猜测,但是每次我试图构建pygit2时,它总是会导致这样的结果:
(testenv)emil ~/sites/env/testenv/pygit2 > which python
/Users/emil/Sites/env/testenv/bin/python
(testenv)emil ~/sites/env/testenv/pygit2 > python -c 'import pygit2'
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "pygit2/__init__.py", line 32, in <module>
import _pygit2
ImportError: dlopen(/Users/emil/sites/env/testenv/lib/python2.7/site-packages/_pygit2.so, 2): Symbol not found: _git_remote_fetchspec
Referenced from: /Users/emil/sites/env/testenv/lib/python2.7/site-packages/_pygit2.so
Expected in: flat namespace
in /Users/emil/sites/env/testenv/lib/python2.7/site-packages/_pygit2.so它似乎没有正确地连接库:
(testenv)emil ~/sites/env/testenv/pygit2 > nm /Users/emil/sites/env/testenv/lib/python2.7/site-packages/_pygit2.so | grep _git | less
000000000000626c T _Repository_git_object_lookup_prefix
0000000000011288 d _Repository_git_object_lookup_prefix__doc__
U _git_blob_create_frombuffer
U _git_blob_create_fromdisk
U _git_blob_create_fromworkdir
U _git_blob_rawsize
U _git_checkout_head
U _git_checkout_index
U _git_checkout_tree
U _git_commit_author
U _git_commit_committer
U _git_commit_create
U _git_commit_free
U _git_commit_lookup
U _git_commit_lookup_prefix
...当我尝试使用pip时,它说:
(testenv)emil ~/sites/env/testenv/pygit2 > pip install pygit2
Requirement already satisfied (use --upgrade to upgrade): pygit2 in /Users/emil/sites/env/testenv/lib/python2.7/site-packages
Cleaning up...
(testenv)emil ~/sites/env/testenv/pygit2 > pip install pygit2 --upgrade
Requirement already up-to-date: pygit2 in /Users/emil/sites/env/testenv/lib/python2.7/site-packages
Cleaning up...如果有人在我希望得到任何帮助之前就设置了这个问题,否则我会用它来记录这个问题并整理我的想法,并希望能记录一个解决方案。
发布于 2013-05-16 12:04:46
我成功地完成了这个设置,为了做到这一点,我必须阅读OSX的@rpath实现:
在阅读了这些之后,我继续进行了一个干净的安装,如下所示:
libgit2
emil ~/Sites/env/testenv > export LIBGIT2=`pwd`
emil ~/Sites/env/testenv > git clone git://github.com/libgit2/libgit2.git -b v0.18.0注意:确保您签出了与当前pygit2版本兼容的标记,此时您可以使用-b v0.18.0。
(testenv)emil ~/sites/env/testenv/libgit2 > mkdir build && cd build
(testenv)emil ~/sites/env/testenv/libgit2/build > cmake .. -DCMAKE_INSTALL_PREFIX=$LIBGIT2
(testenv)emil ~/sites/env/testenv/libgit2/build > cmake --build . --target install注意:,如果您没有用cmake安装它,用Homebrew安装,用brew install cmake安装
现在,我们需要在libgit2库上设置安装名称,以便可以在rpath中找到它。
(testenv)emil ~/sites/env/testenv/lib > otool -D libgit2.0.18.0.dylib
libgit2.0.18.0.dylib:
libgit2.0.dylib
(testenv)emil ~/sites/env/testenv/lib > install_name_tool -id "@rpath/libgit2.0.18.0.dylib" libgit2.0.18.0.dylib
(testenv)emil ~/sites/env/testenv/lib > otool -D libgit2.0.18.0.dylib
libgit2.0.18.0.dylib:
@rpath/libgit2.0.18.0.dylibpygit2
(testenv)emil ~/sites/env/testenv > git clone git://github.com/libgit2/pygit2.git
(testenv)emil ~/sites/env/testenv > cd pygit2/
(testenv)emil ~/sites/env/testenv/pygit2 > python setup.py build注意: OSX链接器没有pygit2教程中推荐的一些LDFLAGS,所以暂时跳过使用它们,稍后您将设置rpath。
(testenv)emil ~/sites/env/testenv/pygit2 > python setup.py install好的,现在您将得到这样一个错误,因为rpath没有在pygit2库上正确地设置:
(testenv)emil ~/sites/env/testenv/pygit2 > python -c 'import pygit2'
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "pygit2/__init__.py", line 32, in <module>
import _pygit2
ImportError: dlopen(/Users/emil/sites/env/testenv/lib/python2.7/site-packages/_pygit2.so, 2): Library not loaded: @rpath/libgit2.0.18.0.dylib
Referenced from: /Users/emil/sites/env/testenv/lib/python2.7/site-packages/_pygit2.so
Reason: image not found所以让我们把它设置为:
(testenv)emil ~/sites/env/testenv/pygit2 > cd /Users/emil/sites/env/testenv/lib/python2.7/site-packages/
(testenv)emil ~/sites/env/testenv/lib/python2.7/site-packages > install_name_tool -add_rpath "@loader_path/../../" _pygit2.so 现在测试它,如果没有输出,那么一切都进行得很好:
(testenv)emil ~/sites/env/testenv/lib/python2.7/site-packages > python -c 'import pygit2':)
发布于 2013-05-16 08:15:56
pygit2 2网站上的说明似乎有点误导人。它们的默认分支(master)绑定目标libgit2 2的master分支(即最新版本,此时为0.18.0),但libgit2 2的默认分支是development。网站上的“最新”一词的含义还不清楚。
链接器无法找到的函数自上一次发布以来就已被删除,因此看起来您只是在针对错误的libgit2版本进行构建。使用libgit2 2的master分支或它的v0.18.0标记,您应该会没事的。
发布于 2016-04-12 14:40:36
在为salt堆栈安装libgit2和pygit2库时,我遇到了一个问题。最初的安装遵循pygit2文档上的说明,但在python2.7.10下,这会导致“在‘git_cert_hostkey’中没有名为‘父’的成员”这样的错误。
在谷歌搜索了很多之后,CarlosíNieto的话给了我一个提示,并最终在OSX10.11.4上安装了libgit2和pygit2。
用自制软件安装libgit2,注意安装的版本。
brew install libgit2在我的例子中,安装了libgit2 0.23.4。
用源代码构建pygit2。检查changelog中与您安装的pygit2版本匹配的libgit2版本。这里我用标记v0.23.3克隆源代码。
git clone https://github.com/libgit2/pygit2.git -b v0.23.3
cd pygit2
python setup.py build
python setup.py install最后,libgit2和pygit2都安装在您的mac上。希望这能帮上忙。
https://stackoverflow.com/questions/16570217
复制相似问题