在Mac上的Python virtualenv中安装pygit2/libgit2
我想我快要失去理智了。我正试图在MacBookAir上的python virtualenv中简单地安装在Mac上的Python virtualenv中安装pygit2/libgit2,python,macos,virtualenv,libgit2,pygit2,Python,Macos,Virtualenv,Libgit2,Pygit2,我想我快要失去理智了。我正试图在MacBookAir上的python virtualenv中简单地安装pygit2,这样我就可以开始工作了。然而,这并没有改变,我已经尝试了一整天 我应该遵循以下说明: 我已经尝试了无数的事情,在rpath上乱搞,因为显然在Mac上实现的方式不同: 。。。在这一点上,我只是猜测,还有无数的其他变体,但是每次我尝试构建pygit2时,总是会导致这样的结果: (testenv)emil ~/sites/env/testenv/pygit2 > which p
pygit2
,这样我就可以开始工作了。然而,这并没有改变,我已经尝试了一整天
我应该遵循以下说明:
我已经尝试了无数的事情,在rpath
上乱搞,因为显然在Mac上实现的方式不同:
。。。在这一点上,我只是猜测,还有无数的其他变体,但是每次我尝试构建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
当我尝试使用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...
如果有人在我之前设置了这个,我将非常感谢任何帮助,否则我将用它来记录问题,整理我的想法,并希望记录解决方案。pygit2网站上的说明似乎有点误导。它们的默认分支(
master
)绑定libgit2的master
分支(即最新版本,目前为0.18.0),但libgit2的默认分支是开发
。网站上“最新”的含义不清楚
链接器找不到的函数自上次发布以来已被删除,因此看起来您只是在针对错误的libgit2版本进行构建。使用libgit2的
master
分支或其v0.18.0
标记,您应该会没事的。我成功地建立了这个设置,为了做到这一点,我必须阅读OSX对@rpath
的实现:
pygit2
版本兼容的标签,此时您可以使用-bv0.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
使用自制软件安装,请使用brew安装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.dylib
pygit2
注意:OSX链接器没有pygit2教程中推荐的一些LDFlag,因此现在跳过使用它们,稍后将设置rpath
(testenv)emil ~/sites/env/testenv/pygit2 > python setup.py install
好的,现在您将得到这样一个错误,因为pygit2库上的rpath
设置不正确:
(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/lib/python2.7/site-packages > python -c 'import pygit2'
:)埃米尔·达夫坦的回答对我有帮助。我当时在Mac OS上,正在尝试将python3与更高版本的libgit一起使用,因此不得不将其修改为以下内容
brew install python3
libgit_version = '0.24.0'
mkvirutalenv --python=`which python3` py3libgit
workon py3libgit
cd $VIRTUAL_ENV
export LIBGIT2=`pwd`
git clone git://github.com/libgit2/libgit2.git -b "v${libgit_version}"
cd libgit2 && mkdir build && cd build
cmake --build . --target install
cd $LIBGIT2/lib
install_name_tool -id "@rpath/libgit2.${libgit_version}.dylib" libgit2.${libgit_version}.dylib
otool -D libgit2.${libgit_version}.dylib
安装pygit
注意,请确保python--version
为例如python3.5.1
提供的值为python3.5.x
。假设我们有3.5,以下内容适用
cd $VIRTUAL_ENV/lib/python3.5/site-packages
install_name_tool -add_rpath "@loader_path/../../" _pygit2.cpython-35m-darwin.so
otool -L _pygit2.cpython-35m-darwin.so
python -c 'import pygit2'
我在为saltstack安装libgit2和pygit2库时遇到了一个问题。最初的安装是按照python 2.7.10上的说明进行的,但是在python 2.7.10下,出现了诸如“git_cert_hostkey中没有名为'parent'的成员”之类的错误 在谷歌搜索了很多之后,卡洛斯·马丁涅托的话给了我一个提示,最终在OS X 10.11.4上安装了libgit2和pygit2 使用自制软件安装libgit2,请注意安装的版本 在我的例子中,安装了libgit20.23.4 使用源代码构建pygit2。在changelog中检查与您安装的libgit2匹配的pygit2版本。在这里,我克隆了带有标记v0.23.3的源代码
最后,libgit2和pygit2安装在mac上。希望这能有所帮助。我成功地安装了它,这是问题的一部分,但总体问题来自于在macintosh上正确设置
rpath
。我将发布一点完整的说明给其他可能遇到类似情况的人。
(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'
brew install python3
libgit_version = '0.24.0'
mkvirutalenv --python=`which python3` py3libgit
workon py3libgit
cd $VIRTUAL_ENV
export LIBGIT2=`pwd`
git clone git://github.com/libgit2/libgit2.git -b "v${libgit_version}"
cd libgit2 && mkdir build && cd build
cmake --build . --target install
cd $LIBGIT2/lib
install_name_tool -id "@rpath/libgit2.${libgit_version}.dylib" libgit2.${libgit_version}.dylib
otool -D libgit2.${libgit_version}.dylib
pip install pygit2==0.24.0
cd $VIRTUAL_ENV/lib/python3.5/site-packages
install_name_tool -add_rpath "@loader_path/../../" _pygit2.cpython-35m-darwin.so
otool -L _pygit2.cpython-35m-darwin.so
python -c 'import pygit2'
brew install libgit2
git clone https://github.com/libgit2/pygit2.git -b v0.23.3
cd pygit2
python setup.py build
python setup.py install