Pipenv: 2018.11.26: pipenv выдает ошибки pythons при создании virtualenv

Созданный на 6 дек. 2018  ·  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`

Пока что делаю это с успехом: grimacing:

Все 30 Комментарий

Кажется, /usr/local/bin/pythonz больше не является допустимым путем.

Хм. Должно ли это когда-нибудь быть? Я никогда не использовал pythonz напрямую. Я думал, что это просто зависимость от pipenv, которую он управлял, когда я установил pipenv.

Я просто удалил и переустановил pipenv 2018.11.26, и проблема все еще не устранена.

Можете ли вы предоставить результат из pipenv --support ? И чтобы подтвердить, нет, этого не должно было быть

О, nvm только что увидел ваше сообщение. Я просто хочу подтвердить, что на вашем пути где-то нет мошеннической версии pipenv. Можете ли вы проверить which pipenv и python -m pipenv --version

$ which pipenv
/usr/local/bin/pipenv

python -m pipenv --version вернул No module named pipenv потому что у меня Python 2 и Python 3 установлены через Homebrew, а python запускает Python 2.7. Согласно предыдущей рекомендации, я установил pipenv под Python 3. Поэтому я заменил python3 и получил:

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

Благодаря!

Ах хорошо. И да, ошибка имеет смысл. Я просто помечу его вверх по течению и исправлю.

Есть какие-нибудь сведения о том, когда будет выпущено исправление для этого? У меня возникла эта проблема, из-за которой я не могу установить требования pipenv. Я пробовал обходной путь

Я не могу 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`

Пока что делаю это с успехом: grimacing:

Этот обходной путь у меня не работал. Мне пришлось перейти на 2018.10.13 а затем использовать обходной путь в этом потоке :

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

Насколько я могу судить, с октября pipenv полностью сломан.

@techalchemy Есть слова об исправлении тега восходящего потока? Создание pipenv virtualenv по-прежнему требует обходных путей для вызова.

Спасибо ❤️

Это было немного грубо со всеми другими исправлениями, которые необходимо было интегрировать, но я думаю, что CI пройдет сейчас, и это будет исправлено с помощью # 3330 - извините за проблемы

Ах хорошо. И да, ошибка имеет смысл. Я просто помечу его вверх по течению и исправлю.

Проблема по-прежнему сохраняется, есть какие-либо идеи, когда это исправление будет выпущено.

Здесь та же проблема.

Можно подтвердить, что обходной путь @ command-tab все еще работает.

Это определенно все еще происходит с доморощенными pipenv и python ... немного удивлен, что нет теста, чтобы охватить это, видя, как долго эта проблема существует ...

Я также могу подтвердить, что эта проблема все еще возникает, несмотря на то, что проблема с GitHub закрыта.

Нужен ли сопровождающим для создания нового выпуска?

Та же проблема с Ubuntu 18 LTS, установленным в подсистеме Windows для Linux.

У меня работает обходной путь.

@techalchemy, похоже, эта проблема все еще существует. Не могли бы вы снова открыть его или дать понять, что хотите создать новый выпуск?

Благодарю.

Та же проблема с Ubuntu 18 LTS, установленным в подсистеме Windows для Linux.

тоже самое

@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
Это сработало и для меня на WSL в VSCode (я не пробовал использовать внешнюю оболочку, поскольку она отлично работала для другого проекта).

@ command-tab
Добавление "--python = which python3 " также сработало. Я не пробовал добавлять "--three", и это кажется необязательным для моего варианта использования / версии.

Получив оба обходных пути, и я смог заставить его работать, я удалил их и попробовал в третий раз, чтобы убедиться, что среда по-прежнему вызывает проблему (рассказчик: это было).

@techalchemy
Думаю, это может быть не "полностью исправлено" в 3330? Это может быть второстепенная проблема, вызывающая те же симптомы. В моем случае я использую WSL и задаюсь вопросом, кажутся ли подозрительными «python3» и «python3.exe» на моем пути к WSL.

Считаете ли вы, что лучше всего открыть новую проблему, провести дополнительную диагностику или что-то еще?

Я использую wsl2 с arclinux (manjaro)
Кажется, pipenv вызывает python в окнах хоста env для установки
поэтому нам нужно определить, где найти питон:
pipenv --python=<PATH_TO_PYTHON>
или же
pipenv --python=which python3

работает на меня.

Могу подтвердить, что это происходит в WSL с Ubuntu 18.04 LTS. Похоже, что pipenv ищет интерпретатор python, а не использует тот, под которым он выполняется, и при этом проходит PATH в обратном порядке. У меня установлено несколько сред python, и всякий раз, когда я вручную удаляю одну из PATH, pipenv найдет другую и вместо этого пожалуется на нее.

Я вижу ту же проблему в WSL с Ubuntu 18.04 LTS. 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 года - 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))

Теперь вы получите более точный отчет об исключениях. В моем случае проблема связана с тем, что pipenv на основе WSL Linux обнаруживает установки Python на основе Windows и испытывает проблемы с их запуском, что отчасти очевидно:

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 эту проблему можно решить, убедившись, что любые требования к вашей версии Python в Pipfile _ точно_ совпадают с установкой Python на базе Linux, например

[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 рейтинги