2

気が狂いそうです。pygit2作業を開始できるように、Macbook Air の python virtualenv に単純にインストールしようとしています。しかし、これはうまくいかず、私は一日中セットアップしようとしています.

私はこれらの指示に従うことになっています:

http://www.pygit2.org/install.html#how-to-install

rpathどうやらMacではこれが異なる方法で実装されているため、私は数え切れないほどのことを試しました。

Mac OSX で 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...

助けを求める前に誰かがこれを設定した場合は、これを使用して問題を文書化し、考えを整理し、できれば解決策を記録します.

4

4 に答える 4

3

pygit2 のサイトの指示は少し誤解を招くようです。彼らのデフォルトのブランチ ( master) バインドは、libgit2 のmasterブランチ (つまり、最新リリース、現時点では 0.18.0) をターゲットにしていますが、libgit2 のデフォルトのブランチはdevelopment. サイトでの「最新」の意味が明確ではありません。

リンカが見つけられない関数は最後のリリース以降に削除されているため、単に間違った libgit2 バージョンに対してビルドしているように見えます。libgit2 のmasterブランチまたはそのv0.18.0タグを使用すれば問題ありません。

于 2013-05-16T08:15:56.797 に答える
1

私はなんとかこのセットアップを行うことができました。それを行うには、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

ここで、ライブラリにインストール名を設定して、 .libgit2rpath

(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

(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

rpathpygit2 ライブラリで が適切に設定されていないため、次のようなエラーが発生します。

(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-16T12:04:46.217 に答える