Pipenv: 2018.11.26:virtualenvを作成するときにpipenvがpythonsエラーを発行する

作成日 2018年12月06日  ·  30コメント  ·  ソース: pypa/pipenv

問題の説明

おそらく#3229に関連して、pipenvはvirtualenvの作成時にエラーをスローし続けます。

$ pipenv --three
['Traceback (most recent call last):\n', '  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/vistir/misc.py", line 160, in _create_subprocess\n    combine_stderr=combine_stderr)\n', '  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/vistir/misc.py", line 134, in _spawn_subprocess\n    return subprocess.Popen(cmd, **options)\n', '  File "/usr/local/Cellar/python/3.6.5_1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/subprocess.py", line 709, in __init__\n    restore_signals, start_new_session)\n', '  File "/usr/local/Cellar/python/3.6.5_1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/subprocess.py", line 1344, in _execute_child\n    raise child_exception_type(errno_num, err_msg, err_filename)\n', "FileNotFoundError: [Errno 2] No such file or directory: '/usr/local/bin/pythonz': '/usr/local/bin/pythonz'\n", '\nDuring handling of the above exception, another exception occurred:\n\n', 'Traceback (most recent call last):\n', '  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/vistir/contextmanagers.py", line 150, in spinner\n    yield _spinner\n', '  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/vistir/misc.py", line 314, in run\n    write_to_stdout=True\n', '  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/vistir/misc.py", line 162, in _create_subprocess\n    sys.stderr.write("Error %s while executing command %s", exc, " ".join(cmd._parts))\n', 'TypeError: write() takes exactly one argument (3 given)\n']
Traceback (most recent call last):
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/vistir/misc.py", line 160, in _create_subprocess
    combine_stderr=combine_stderr)
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/vistir/misc.py", line 134, in _spawn_subprocess
    return subprocess.Popen(cmd, **options)
  File "/usr/local/Cellar/python/3.6.5_1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/subprocess.py", line 709, in __init__
    restore_signals, start_new_session)
  File "/usr/local/Cellar/python/3.6.5_1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/subprocess.py", line 1344, in _execute_child
    raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: '/usr/local/bin/pythonz': '/usr/local/bin/pythonz'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/bin/pipenv", line 11, in <module>
    sys.exit(cli())
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/click/core.py", line 764, in __call__
    return self.main(*args, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/click/core.py", line 717, in main
    rv = self.invoke(ctx)
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/click/core.py", line 1114, in invoke
    return Command.invoke(self, ctx)
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/click/core.py", line 956, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/click/core.py", line 555, in invoke
    return callback(*args, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/click/decorators.py", line 64, in new_func
    return ctx.invoke(f, obj, *args, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/click/core.py", line 555, in invoke
    return callback(*args, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/click/decorators.py", line 17, in new_func
    return f(get_current_context(), *args, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/pipenv/cli/command.py", line 208, in cli
    clear=state.clear,
  File "/usr/local/lib/python3.6/site-packages/pipenv/core.py", line 574, in ensure_project
    pypi_mirror=pypi_mirror,
  File "/usr/local/lib/python3.6/site-packages/pipenv/core.py", line 516, in ensure_virtualenv
    ensure_python(three=three, python=python)
  File "/usr/local/lib/python3.6/site-packages/pipenv/core.py", line 397, in ensure_python
    path_to_python = find_a_system_python(python)
  File "/usr/local/lib/python3.6/site-packages/pipenv/core.py", line 360, in find_a_system_python
    python_entry = finder.find_python_version(line)
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/pythonfinder/pythonfinder.py", line 114, in find_python_version
    major=major, minor=minor, patch=patch, pre=pre, dev=dev, arch=arch, name=name
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/pythonfinder/models/path.py", line 396, in find_python_version
    ver = next(iter(self.get_pythons(sub_finder)), None)
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/pythonfinder/models/path.py", line 279, in get_pythons
    reverse=True
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/pythonfinder/models/path.py", line 277, in <genexpr>
    (p for p in self._filter_paths(finder) if p.is_python),
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/pythonfinder/models/path.py", line 264, in <genexpr>
    pth for pth in unnest(finder(p) for p in self.path_entries if p is not None)
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/pythonfinder/utils.py", line 251, in unnest
    for el in target:
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/pythonfinder/models/path.py", line 264, in <genexpr>
    pth for pth in unnest(finder(p) for p in self.path_entries if p is not None)
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/pythonfinder/models/mixins.py", line 121, in find_python_version
    for child in unnest(self.pythons.values())
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/pythonfinder/models/path.py", line 531, in pythons
    for path, entry in self.children.items():
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/cached_property.py", line 35, in __get__
    value = obj.__dict__[self.func.__name__] = self.func(obj)
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/pythonfinder/models/path.py", line 501, in children
    for child_key, child_val in self._gen_children():
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/pythonfinder/models/path.py", line 493, in _gen_children
    entry = PathEntry.create(path=child, **pass_args)
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/pythonfinder/models/path.py", line 575, in create
    _new = cls(**creation_args)
  File "<attrs generated init b90d7581ea07925e94241736776cf96c889eb52c>", line 16, in __init__
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/pythonfinder/models/path.py", line 518, in get_py_version
    py_version = PythonVersion.from_path(path=self, name=self.name)
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/pythonfinder/models/python.py", line 395, in from_path
    py_version = get_python_version(path.path.absolute().as_posix())
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/pythonfinder/utils.py", line 68, in get_python_version
    combine_stderr=False, write_to_stdout=False)
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/vistir/misc.py", line 314, in run
    write_to_stdout=True
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/vistir/misc.py", line 162, in _create_subprocess
    sys.stderr.write("Error %s while executing command %s", exc, " ".join(cmd._parts))
TypeError: write() takes exactly one argument (3 given)

期待される結果

virtualenvを作成するだけで、エラーログは発生しないと予想されます。

実結果

virtualenvの作成は失敗します。

複製する手順

$ pipenv --three

pipenv --supportもこれらのエラーを発行し、サポート情報の収集に失敗します。

Type Regression Release Blocker Vendored Dependencies

最も参考になるコメント

現在のリリースは確かに私にはうんざりしているようです。 過去の号で見たもう1つの一時的な回避策は、次のようにpythonパスを具体的に渡すこと

pipenv --three --python=`which python3`

私は当分の間これを成功させてきました:grimacing:

全てのコメント30件

/usr/local/bin/pythonzは有効なパスではなくなったようです。

うーん。 それはあったはずですか? pythonzを直接使用したことはありません。 pipenvをインストールしたときに管理したのは単なるpipenvの依存関係だと思いました。

キックについては、pipenv 2018.11.26をアンインストールして再インストールしましたが、まだ問題が発生しています。

pipenv --supportからの出力を提供できますか? そして確認するために、そうではなかったはずです

ああnvmはちょうどあなたのメッセージを見ました。 どこかにあなたのパスに不正なバージョンのpipenvがないことを確認したいだけです。 which pipenvpython -m pipenv --versionを確認できますか

$ which pipenv
/usr/local/bin/pipenv

python -m pipenv --versionNo module named pipenv python -m pipenv --version返しました。これは、Python2とPython3の両方がHomebrew経由でインストールされており、 pythonがPython2.7を実行しているためです。 ここでの以前の推奨事項に従って、Python 3でpipenvをインストールしました。そこで、 python3に置き換えて、次のようにしました。

$ python3 -m pipenv --version
pipenv, version 2018.11.26

ありがとう!

ああ、わかりました。 そして、ええ、バグは理にかなっています。 上流にタグを付けて、修正されることを確認します

これに対する修正がいつリリースされるかについて何か言いたいことはありますか? 私はこの問題を抱えており、pipenv要件をインストールできません。 私は@commandtabの回避策を試し

私は、現在のバージョンとまったく仕事にpipenvを取得することはできません。

$ which pipenv
/Users/josh/.pyenv/shims/pipenv

$ python -m pipenv --version
pipenv, version 2018.11.26

自作のpython3.7でインストールしてみましたが、同じ問題が発生しました。

ここでは緊急性はないようですが、大きな問題ではないようです。 私は何かが足りないのですか、それとも現在のバージョンでpipenvが完全に壊れていますか?

現在のリリースは確かに私にはうんざりしているようです。 過去の号で見たもう1つの一時的な回避策は、次のようにpythonパスを具体的に渡すこと

pipenv --three --python=`which python3`

私は当分の間これを成功させてきました:grimacing:

その回避策は私にはうまくいきませんでした。 2018.10.13にダウングレードしてから、そのスレッドで回避策を使用する必要がありまし

pipenv install -d --python=$HOME/.pyenv/versions/3.7.1/bin/python

私の知る限り、pipenvは10月から完全に壊れています。

@techalchemyアップストリームタグの修正に関する単語はありますか? pipenv virtualenvの作成には、呼び出しの回避策が必要です。

ありがとう❤️

これは、統合する必要のある他のすべての修正では少し荒いものでしたが、CIは今すぐ合格し、#3330で修正されると思います-問題をお詫びします

ああ、わかりました。 そして、ええ、バグは理にかなっています。 上流にタグを付けて、修正されることを確認します

それでも問題は解決しません。この修正がいつリリースされるかはわかりません。

ここで同じ問題。

@ command-tabの回避策が引き続き機能することを確認できます。

これは間違いなく自作のpipenvとpythonで起こります…この問題がどれくらい続いているかを見てそれをカバーするテストがないのはちょっと驚いています…

このGitHubの問題は解決されましたが、この問題がまだ発生していることも確認できます。

メンテナは新しい問題を作成する必要がありますか?

Linux用のWindowsサブシステムにインストールされているUbuntu18LTSでも同じ問題が発生します。

回避策は私のために働きます。

@techalchemyこの問題はまだ存在しているようです。 再度開くか、新しい問題を作成することを明確にしてください。

ありがとう。

Linux用のWindowsサブシステムにインストールされているUbuntu18LTSでも同じ問題が発生します。

こっちも一緒

@techalchemyもう一度ご覧ください

macOsMojaveとpython3.7で同じ問題が発生します

私も:

  • カタリナ
  • Python3.7。

Pipfileでこの行をコメントアウトすると、すべて正常に機能します。

[requires]

#python_version = "3.7.4"

私も:

  • カタリナ
  • Python3.7。

Pipfileでこの行をコメントアウトすると、すべて正常に機能します。

[requires]

#python_version = "3.7.4"

ああ、これは私のために働いた、ありがとう!

@JarredStanford @edsu
これは、VSCodeのWSLでも機能しました(別のプロジェクトで正常に機能したため、外部シェルは試しませんでした)。

@ command-tab
「--python = which python3 」の追加も機能しました。 「--three」を追加しようとしませんでしたが、ユースケース/バージョンには必要ないようです。

両方の回避策を取得し、それを機能させることができた後、それらを削除し、環境がまだ問題を引き起こしていることを確認するために3回目の試行を行いました(ナレーター:それはそうでした)。

@techalchemy
これは3330で「完全に修正」されていない可能性があると思いますか? 同じ症状を引き起こす接線の問題である可能性があります。 私の場合、WSLを使用していて、「python3」と「python3.exe」の両方がWSLパスにあるのではないかと考えています。

新しい問題を開くのが最善だと思いますか、追加の診断を実行しますか、それとも他の何かを実行しますか?

私はarclinux(manjaro)でwsl2を使用しています
pipenvがホスト環境ウィンドウでPythonを呼び出してインストールしているようです
したがって、Pythonを見つける場所を次のように定義する必要があります。
pipenv --python=<PATH_TO_PYTHON>
または
pipenv --python=which python3

私のために働きます。

これがUbuntu18.04LTSのWSLで発生することを確認できます。 pipenvは、実行されているものを使用するのではなく、Pythonインタープリターを探しているようです。そのため、PATHを逆の順序でトラバースしています。 複数のPython環境がインストールされており、PATHから手動で削除すると、pipenvは別の環境を見つけて、代わりにその環境について文句を言います。

Ubuntu 18.04LTSのWSLでも同じ問題が発生しています。 pipenv install --python $(which python3)機能しますが、その後pipenv shell 、ダウンロードする必要のある依存関係が見つかりません。

また、WSL1とUbuntu18.04を使用して影響を受けています。 回避策--python $(which python)機能します。

例外の最後の部分、つまりこのビットの理由:

  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/pythonfinder/utils.py", line 68, in get_python_version
    combine_stderr=False, write_to_stdout=False)
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/vistir/misc.py", line 314, in run
    write_to_stdout=True
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/vistir/misc.py", line 162, in _create_subprocess
    sys.stderr.write("Error %s while executing command %s", exc, " ".join(cmd._parts))
TypeError: write() takes exactly one argument (3 given)

...最初の例外を処理するときにエラーを出力する呼び出しにバグがあるためです。 このバグは、2019年1月にマスターですでに修正されているようです-https //github.com/pypa/pipenv/commit/574fe7308d9ac81d64da954722f35c9eee0dd467#diff-a59595db75020aeb9f688d6a0b4818e6L162。 しかし、pipenvの最新バージョンは2018.11.26なので、ほとんどの場合、修正バージョンがないと思います。

手動でパッチを当てることができます。 /usr/local/lib/<your-python-version>/site-packages/pipenv/vendor/vistir/misc.py開き、行162に移動して、次のように変更します。

sys.stderr.write("Error %s while executing command %s", exc, " ".join(cmd._parts))

...これに:

sys.stderr.write(f"Error {exc} while executing command " + " ".join(cmd._parts))

これで、より正確な例外レポートが得られます。 私の場合、問題はWSL LinuxベースのpipenvがWindowsベースのPythonインストールを検出し、それらの実行に問題があることに関係しています。これは明らかです。

Error [Errno 8] Exec format error: '/mnt/c/Users/<user>/AppData/Local/Microsoft/WindowsApps/python3.exe' while executing command /mnt/c/Users/<user>/AppData/Local/Microsoft/WindowsApps/python3.exe -c import sys; print(['Traceback (most recent call last):\n', '  File "/usr/local/lib/python3.6/dist-packages/pipenv/vendor/vistir/contextmanagers.py", line 150, in spinner\n    yield _spinner\n', '  File "/usr/local/lib/python3.6/dist-packages/pipenv/vendor/vistir/misc.py", line 314, in run\n    write_to_stdout=True\n', '  File "/usr/local/lib/python3.6/dist-packages/pipenv/vendor/vistir/misc.py", line 160, in _create_subprocess\n    combine_stderr=combine_stderr)\n', '  File "/usr/local/lib/python3.6/dist-packages/pipenv/vendor/vistir/misc.py", line 134, in _spawn_subprocess\n    return subprocess.Popen(cmd, **options)\n', '  File "/usr/lib/python3.6/subprocess.py", line 729, in __init__\n    restore_signals, start_new_session)\n', '  File "/usr/lib/python3.6/subprocess.py", line 1364, in _execute_child\n    raise child_exception_type(errno_num, err_msg, err_filename)\n', "OSError: [Errno 8] Exec format error: '/mnt/c/Users/<user>/AppData/Local/Microsoft/WindowsApps/python3.exe'\n"]

WSLユーザーの場合、 Pipfile Pythonバージョンの要件が、LinuxベースのPythonインストールと_正確に_一致するようにすることで、問題を軽減できると思います。

[requires]
python_version = "3.6.8"  # Make sure this exactly matches an installed version, or remove it.

お役に立てれば。

これがどれだけ役立つかはわかりませんが、Pipfileを削除し、 pipenv lockを実行してから、古いPipfileの内容を元に戻してpipenv installを実行すると、永続的に機能します。

このページは役に立ちましたか?
0 / 5 - 0 評価