6

Arch Linux Python 3.3.0 を使用しています。最新のリポジトリをダウンロードしました。Google の例からリポジトリを初期化しようとすると、次のエラーが発生します。

 [username@otp-username-l2 teste]$ repo init -u https://android.googlesource.com/platform/manifest
 Traceback (most recent call last):
 File "/home/username/bin/repo", line 738, in <module>
main(sys.argv[1:])
File "/home/username/bin/repo", line 705, in main
_Init(args)
 File "/home/username/bin/repo", line 234, in _Init
_CheckGitVersion()
 File "/home/username/bin/repo", line 274, in _CheckGitVersion
if not ver_str.startswith('git version '):
TypeError: startswith first arg must be bytes or a tuple of bytes, not str

新しいリポジトリの初期化を余儀なくされた理由は、すでに初期化されているリポジトリからコミットを行う必要があるためですが、どこからでも git ユーザーを変更しましたが、まだこれを取得しています:

Writing objects: 100% (12/12), 966 bytes, done.
Total 12 (delta 11), reused 0 (delta 0)
o ssh://new.username@128.224.0.74:29418/stelvio/mm
![remote rejected] branchname -> refs/for/main_dev (you are not committer  oldusername@email.com)
 error: failed to push some refs to 'ssh://new.username@128.224.0.74:29418/project/one'
4

3 に答える 3

9

Repo はまだ Python 3 を完全にはサポートしていません。関数の使用print正しい urllib のインポートなど、一部の作業は行われていますが、その作業は完了していないようです。

repo今のところ、Python 2 で使用する必要がありpythonますpython2

python2 `which repo`

Python 2 のバージョンが としてパスにインストールされていると仮定しますpython2

問題を簡単に再現できます。

Python 3.2.3 (default, Nov  7 2012, 19:36:04) 
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> b'asd'.startswith('asd')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: startswith first arg must be bytes or a tuple of bytes, not str

そして、ここに関連するコードがあり_CheckGitVersion()ます:

def _CheckGitVersion():
  cmd = [GIT, '--version']
  try:
    proc = subprocess.Popen(cmd, stdout=subprocess.PIPE)

   ...

  ver_str = proc.stdout.read().strip()
  proc.stdout.close()
  proc.wait()

  if not ver_str.startswith('git version '):

readstdoutを呼び出すとreturnPopenが返さbytesれるため、渡されるものstartswithも(Unicode コード ポイントのシーケンスbytes) ではなく (データの生のバイト) である必要があります。str

于 2013-04-09T23:39:15.463 に答える
7

P990 を復活させようとしているときに、このエラーに出くわしました。

最初の修正は、レポコマンドを変更することです(あなたの場合は ~/bin で、それ以外の場合はどのレポがどこにあるかを確認してください)、最初の行を次のように変更します

#!/usr/bin/env python

#!/usr/bin/env python2

これにより init をレポすることができますが、klauspeter が言及したメッセージに出くわします。

error: Python 3 support is not fully implemented in repo yet.
Please use Python 2.6 - 2.7 instead.

システム全体のシンボリックリンクを変更することはお勧めしません。代わりに、新しく作成された .repo フォルダーに移動します。

$basedir で repo init を開始した場合は、$basedir/.repo/repo を確認します。内部には、ローカル リポジトリのインストールがあり、ここでもプレーンな 'python' のシバンがあります (python2 が必要です)。

上記の最初の手順に従って、その行を含むすべてのファイル ( main.py、repo、および wrapper.py ) を編集すれば、準備完了です。私の場合、repo はグローバル インストールを更新する (つまり、$basedir/.repo/repo/repo を ~/bin にコピーする) ように要求しましたが、これは自由に実行できます (そのバージョンは現在「修正済み」です)。

于 2013-10-11T09:12:49.543 に答える
1

私は同じ問題に遭遇しました.agfのソリューションはレポスクリプトを機能させましたが、Python 3では機能しないと述べて終了しました:

エラー: Python 3 のサポートは、まだリポジトリに完全に実装されていません。
代わりに Python 2.6 - 2.7 を使用してください。

私にとってこれを回避する(確かにかなり汚い)方法は、python bin のシンボリックリンクを python3 から python2 に変更することでした。

完了したら、これを元に戻すことを忘れないでください。

于 2013-10-02T17:19:41.103 に答える