Pipenv: 2018.11.26:创建virtualenv时pipenv发出python错误

创建于 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

最有用的评论

当前的发行版肯定在我眼前。 我在上一期中看到的另一个临时解决方法是专门传递python路径,如下所示:

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

我一直在成功地做到这一点:做鬼脸:

所有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 --version返回No module named pipenv因为我同时通过Homebrew安装了Python 2和Python 3,而python运行Python 2.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在当前版本中完全损坏了?

当前的发行版肯定在我眼前。 我在上一期中看到的另一个临时解决方法是专门传递python路径,如下所示:

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

我一直在成功地做到这一点:做鬼脸:

该解决方法对我不起作用。 我不得不降级为2018.10.13 ,然后在线程上使用替代方法:

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

据我所知,自10月以来,pipenv已完全损坏。

@techalchemy上游标签修复程序中有任何单词吗? pipenv virtualenv创建仍然需要调用变通办法。

谢谢❤️

对于需要集成的所有其他修复程序,这有点粗糙,但是我认为CI现在可以通过,并且将在#3330中修复-麻烦您了

喔好吧。 是的,这个错误是有道理的。 我将其标记在上游,并确保将其固定

问题仍然存在,何时发布此修复程序的任何想法。

这里同样的问题。

可以确认@ command-tab的解决方法仍然有效。

自制的pipenv和python仍然肯定会发生这种情况……令人惊讶的是,没有看到涵盖该问题持续了多长时间的测试……

我也可以确认,尽管这个GitHub问题已经解决,但这个问题仍然在发生。

维护者是否需要创建新的问题?

Linux的Windows子系统中安装的Ubuntu 18 LTS的相同问题。

解决方法对我有用。

@techalchemy这个问题似乎仍然存在。 您可以重新打开它还是清楚地表明要创建一个新的问题?

谢谢。

Linux的Windows子系统中安装的Ubuntu 18 LTS的相同问题。

同样在这里

@techalchemy请再看一看

macOs Mojave和python 3.7上的相同问题

我也是:

  • 卡塔琳娜
  • Python 3.7。

一旦我在Pipfile中将此行注释掉,一切都会正常进行:

[requires]

#python_version = "3.7.4"

我也是:

  • 卡塔琳娜
  • Python 3.7。

一旦我在Pipfile中将此行注释掉,一切都会正常进行:

[requires]

#python_version = "3.7.4"

啊,这对我有用,谢谢!

@JarredStanford @edsu
这在VSCode中的WSL上也对我有效(我没有尝试使用外部外壳,因为它在其他项目中也可以正常工作)。

@ command-tab
添加“ --python = which python3 ”也可以。 我没有尝试添加“-三”,对于我的用例/版本,似乎没有必要。

在获得两种解决方法后,我能够使其正常工作,我将其删除,并尝试第三次以确保环境仍然引起问题(讲述人:的确如此)。

@techalchemy
我想这可能不会在3330中“完全解决”吗? 这可能是导致相同症状的切线问题。 就我而言,我正在使用WSL,想知道'python3'和'python3.exe'都在我的WSL路径中是否可疑。

您是否认为最好打开一个新期刊,是否要我运行其他诊断程序,或者其他?

我在arclinux中使用wsl2(manjaro)
似乎Pipenv正在宿主环境Windows中调用python进行安装
所以我们需要定义在哪里可以找到python:
pipenv --python=<PATH_TO_PYTHON>
要么
pipenv --python=which python3

为我工作。

可以通过Ubuntu 18.04 LTS在WSL下确认这种情况。 似乎pipenv正在寻找python解释器,而不是使用正在执行的python解释器,并且这样做实际上是在向后遍历PATH。 我安装了多个python环境,每当我从PATH中手动删除一个环境时,pipenv都会找到另一个环境并抱怨该环境。

我在Ubuntu 18.04 LTS的WSL下看到了相同的问题。 pipenv install --python $(which python3)可以工作,但是当我随后执行pipenv shell ,它找不到应该下载的依赖项。

使用WSL 1和Ubuntu 18.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月在master中修复-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安装_exactly_完全匹配来缓解此问题。

[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 等级