Pipenv: Pipenv неправильно разрешает --system python.

Созданный на 31 окт. 2017  ·  46Комментарии  ·  Источник: pypa/pipenv

Опишите свое окружение
  1. Тип ОС Docker Alpine Python -> https://github.com/docker-library/python/blob/1d59eb2dd813c64891bf554a8ea01754aba25816/3.6/alpine3.6/Dockerfile
  2. Версия Python: Python 3.6.3
  3. Версия Pipenv: pipenv, version 8.3.1
Ожидаемый результат

Если я устанавливаю PIP_PYTHON_PATH, он игнорируется и переопределяется pipenv (мой вопрос: почему, что за этим стоит?), Потому что https://github.com/kennethreitz/pipenv/blob/master/pipenv/utils.py#L367 переопределяет этот ENV переменная, когда я использую флаг --system . Я поймал эту проблему, потому что при создании моего образа докера он не работал на pipenv install --system

Почему я это знаю? Потому что есть другая функция, которая работает некорректно.
`` (Pdb) python_path
'/ bin / python'
(Pdb) which ('питон')
'/ bin / python'
(PDB) печать (sys.executable)
'/ usr / локальный / бен / питон'

/ # / bin / питон
sh: / bin / python: не найдено

I think issue is somewhere here: https://github.com/kennethreitz/pipenv/blob/1bf6f5101a3bf1dca78be814e742411cc5bdb2dd/pipenv/cli.py#L1440
        p = os.sep.join([location] + ['bin/{0}'.format(command)])

`` this should return / usr / local / bin / python but for some strange reason it's returning / bin / python`

Фактический результат

pipenv install --system следует установить без сбоя, если / bin / python не найден.

Шаги по воспроизведению

pipenv install --system на этом образе докера завершится ошибкой

Самый полезный комментарий

Проблема @kennethreitz не решена, можете ли вы не закрывать то, что еще не исправлено. Проблема все еще воспроизводима.

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

@galuszkak, это интересно. Итак, sys.executable устанавливается в соответствии с pdb, но мы не передаем тот факт, что вы использовали —system когда мы фактически вызываем which() , поэтому он пытается использовать расположение проекта virtualenv который предположительно не существует. Это соответствующий вызов, который должно быть достаточно легко исправить, когда я приду в офис: https://github.com/kennethreitz/pipenv/blob/master/pipenv/utils.py#L406

Что касается того, почему мы делаем все это, это в основном для того, чтобы мы могли обмануть преобразователь пакетов pip-fools для разрешения пакетов python для версий python, которые отличаются от активного интерпретатора.

Используя этот Dockerifle, который основан на том, который был привязан к этому репо, я не могу воспроизвести эту проблему, не говоря, что ее не существует, похоже, что что-то не так, купите этот файл докеров, похоже, работает:

FROM python:alpine3.6

# -- Install Pipenv:
RUN set -ex && pip install pipenv --upgrade

# -- Install Application into container:
RUN set -ex && mkdir /app

WORKDIR /app

# -- Adding Pipfiles
ONBUILD COPY Pipfile Pipfile
ONBUILD COPY Pipfile.lock Pipfile.lock

# -- Install dependencies:
ONBUILD RUN set -ex && pipenv install --deploy --system

@erinxocon Я не использовал флаг --deploy + Вы не используете $ PIP_PYTHON_PATH, что является исходной проблемой, которая заменяется pipenv.

@galuszkak Извинения; Я понимаю это, я не уверен, почему это нужно устанавливать в данном случае. Мы обязательно должны устранить эту ошибку и исправить ее. Мне просто интересно, есть ли что-то еще с docker alpine, для которого требуется установка PIP_PYTHON_PATH.

@erinxocon не за что извиняться :), спасибо, что обратились к моей проблеме 👍. Исправление, которое я предлагаю в # 1005, сейчас у меня работает.

Но я попробовал ваше изображение, и оно отлично работает с тем же набором вещей. Попытка выяснить, что вызывает мою проблему в первую очередь, потому что sam Pipfile и Pipfile.lock и одинаковые звуки файла .env работают с вашим Dockerfile, и я не вижу разницы, потому что я использую одно и то же изображение ...

Понятно @erinxocon ! Вот как это воспроизвести:

FROM python:3.6-alpine3.6

RUN set -ex && pip install pipenv --upgrade
RUN set -ex && mkdir /app
ENV PIP_PYTHON_PATH=/usr/local/bin/python
COPY Pipfile /app/Pipfile

WORKDIR /app

Pipfile:

[[source]]
url = "https://pypi.python.org/simple"
verify_ssl = true
name = "pypi"

[packages]
flask = "*"
"flask-restful" = "*"

[dev-packages]
pytest = "*"
"pytest-flask" = "*"

[requires]
python_version = "3.6"
$ docker build . -t 'pipenv_issue:latest' --no-cache
$ docker run -it pipenv_issue:latest sh
/app # pipenv install --system
CRITICAL:pip.utils:Error [Errno 2] No such file or directory: '/bin/python': '/bin/python' while executing command python setup.py egg_info
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 722, in __call__
    return self.main(*args, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/click/core.py", line 697, in main
    rv = self.invoke(ctx)
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/click/core.py", line 1066, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/click/core.py", line 895, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/click/core.py", line 535, in invoke
    return callback(*args, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/pipenv/cli.py", line 1855, in install
    do_init(dev=dev, allow_global=system, ignore_pipfile=ignore_pipfile, system=system, skip_lock=skip_lock, verbose=verbose, concurrent=concurrent, deploy=deploy, pre=pre)
  File "/usr/local/lib/python3.6/site-packages/pipenv/cli.py", line 1320, in do_init
    do_lock(system=system, pre=pre)
  File "/usr/local/lib/python3.6/site-packages/pipenv/cli.py", line 1050, in do_lock
    pre=pre
  File "/usr/local/lib/python3.6/site-packages/pipenv/utils.py", line 459, in resolve_deps
    resolved_tree.update(resolver.resolve(max_rounds=PIPENV_MAX_ROUNDS))
  File "/usr/local/lib/python3.6/site-packages/pipenv/patched/piptools/resolver.py", line 102, in resolve
    has_changed, best_matches = self._resolve_one_round()
  File "/usr/local/lib/python3.6/site-packages/pipenv/patched/piptools/resolver.py", line 200, in _resolve_one_round
    for dep in self._iter_dependencies(best_match):
  File "/usr/local/lib/python3.6/site-packages/pipenv/patched/piptools/resolver.py", line 296, in _iter_dependencies
    dependencies = self.repository.get_dependencies(ireq)
  File "/usr/local/lib/python3.6/site-packages/pipenv/patched/piptools/repositories/pypi.py", line 153, in get_dependencies
    result = reqset._prepare_file(self.finder, ireq)
  File "/usr/local/lib/python3.6/site-packages/pipenv/patched/pip/req/req_set.py", line 639, in _prepare_file
    abstract_dist.prep_for_dist()
  File "/usr/local/lib/python3.6/site-packages/pipenv/patched/pip/req/req_set.py", line 134, in prep_for_dist
    self.req_to_install.run_egg_info()
  File "/usr/local/lib/python3.6/site-packages/pipenv/patched/pip/req/req_install.py", line 438, in run_egg_info
    command_desc='python setup.py egg_info')
  File "/usr/local/lib/python3.6/site-packages/pipenv/patched/pip/utils/__init__.py", line 667, in call_subprocess
    cwd=cwd, env=env)
  File "/usr/local/lib/python3.6/subprocess.py", line 709, in __init__
    restore_signals, start_new_session)
  File "/usr/local/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: '/bin/python': '/bin/python'

Кажется, проблема с использованием ONBUILD RUN вместо RUN. Не будучи экспертом по докерам, мне придется выяснить, в чем разница между ними.

@erinxocon Не думаю, что проблема в этом. В приведенном выше примере я показываю вам проблему внутри запущенного контейнера, а не на каком-либо этапе построения изображения.

@erinxocon проблема заключается в установке переменной в первую очередь (что на самом деле не нужно устанавливать, но это не относится к делу) - установив PIP_PYTHON_PATH он нарушает функциональность резолвера, когда вам нужно передать --system :

def which(command, location=None, allow_global=False):
    if location is None:
        location = project.virtualenv_location

    if not allow_global:
        if os.name == 'nt':
            p = find_windows_executable(os.path.join(location, 'Scripts'), command)
        else:
            p = os.sep.join([location] + ['bin/{0}'.format(command)])
    else:
        if command == 'python':
            p = sys.executable

return p

Поскольку @galuszkak использует --system но allow_global не проходит через копию which которая передается преобразователю, но также нет Project.virtualenv_location из-за флага --system мы получаем одновременно:

  1. location равно None
  2. Project.virtualenv_location равно None ( location по-прежнему None )
  3. _not_ allow_global
  4. p = os.sep.join([None] + ['bin/{0}'.format(python)])

Вот так мы получаем /bin/python в качестве попытки команды.

@galuszkak Извините, я не видел, чтобы в вашем примере был передан флаг -it sh.

@techalchemy имеет смысл. У вас есть патч в разработке, или мне стоит взяться за него?

@erinxocon @galuszkak уже написал патч (# 1005), по поводу которого

@erinxocon снова, не извиняюсь и очень благодарен за

Можем ли мы согласиться / не согласиться по поводу # 1005 как исправления? Я постараюсь продолжить обсуждение этого пиара.

Эта проблема снова поразила меня сегодня, но на OS X в совершенно других условиях. Трассировка стека ниже.

➜  saudi git:(dev) ✗ pipenv install -r requirements.txt
Warning: the environment variable LANG is not set!
We recommend setting this in ~/.profile (or equivalent) for proper expected behavior.
Creating a virtualenv for this project…
⠋Traceback (most recent call last):
  File "/usr/local/bin/pew", line 7, in <module>
    from pew.pew import pew
  File "/usr/local/lib/python3.6/site-packages/pew/__init__.py", line 11, in <module>
    from . import pew
  File "/usr/local/lib/python3.6/site-packages/pew/pew.py", line 42, in <module>
    from pew._utils import (check_call, invoke, expandpath, own, env_bin_dir,
  File "/usr/local/lib/python3.6/site-packages/pew/_utils.py", line 22, in <module>
    encoding = locale.getlocale()[1] or 'ascii'
  File "/usr/local/Cellar/python3/3.6.3/Frameworks/Python.framework/Versions/3.6/lib/python3.6/locale.py", line 581, in getlocale
    return _parse_localename(localename)
  File "/usr/local/Cellar/python3/3.6.3/Frameworks/Python.framework/Versions/3.6/lib/python3.6/locale.py", line 490, in _parse_localename
    raise ValueError('unknown locale: %s' % localename)
ValueError: unknown locale: UTF-8

Virtualenv location:
Requirements.txt found, instead of Pipfile! Converting…
Warning: Your Pipfile now contains pinned versions, if your requirements.txt did.
We recommend updating your Pipfile to specify the "*" version, instead.
Requirements file provided! Importing into Pipfile…
Creating a virtualenv for this project…
⠋Traceback (most recent call last):
  File "/usr/local/bin/pew", line 7, in <module>
    from pew.pew import pew
  File "/usr/local/lib/python3.6/site-packages/pew/__init__.py", line 11, in <module>
    from . import pew
  File "/usr/local/lib/python3.6/site-packages/pew/pew.py", line 42, in <module>
    from pew._utils import (check_call, invoke, expandpath, own, env_bin_dir,
  File "/usr/local/lib/python3.6/site-packages/pew/_utils.py", line 22, in <module>
    encoding = locale.getlocale()[1] or 'ascii'
  File "/usr/local/Cellar/python3/3.6.3/Frameworks/Python.framework/Versions/3.6/lib/python3.6/locale.py", line 581, in getlocale
    return _parse_localename(localename)
  File "/usr/local/Cellar/python3/3.6.3/Frameworks/Python.framework/Versions/3.6/lib/python3.6/locale.py", line 490, in _parse_localename
    raise ValueError('unknown locale: %s' % localename)
ValueError: unknown locale: UTF-8

Virtualenv location:
Pipfile.lock not found, creating…
Locking [dev-packages] dependencies…
Locking [packages] dependencies…
CRITICAL:pip.utils:Error [Errno 2] No such file or directory: '/bin/python': '/bin/python' while executing command python setup.py egg_info
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 722, in __call__
    return self.main(*args, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/click/core.py", line 697, in main
    rv = self.invoke(ctx)
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/click/core.py", line 1066, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/click/core.py", line 895, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/click/core.py", line 535, in invoke
    return callback(*args, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/pipenv/cli.py", line 1866, in install
    do_init(dev=dev, allow_global=system, ignore_pipfile=ignore_pipfile, system=system, skip_lock=skip_lock, verbose=verbose, concurrent=concurrent, deploy=deploy, pre=pre)
  File "/usr/local/lib/python3.6/site-packages/pipenv/cli.py", line 1330, in do_init
    do_lock(system=system, pre=pre)
  File "/usr/local/lib/python3.6/site-packages/pipenv/cli.py", line 1121, in do_lock
    pre=pre
  File "/usr/local/lib/python3.6/site-packages/pipenv/utils.py", line 461, in resolve_deps
    resolved_tree.update(resolver.resolve(max_rounds=PIPENV_MAX_ROUNDS))
  File "/usr/local/lib/python3.6/site-packages/pipenv/patched/piptools/resolver.py", line 102, in resolve
    has_changed, best_matches = self._resolve_one_round()
  File "/usr/local/lib/python3.6/site-packages/pipenv/patched/piptools/resolver.py", line 200, in _resolve_one_round
    for dep in self._iter_dependencies(best_match):
  File "/usr/local/lib/python3.6/site-packages/pipenv/patched/piptools/resolver.py", line 274, in _iter_dependencies
    for dependency in self.repository.get_dependencies(ireq):
  File "/usr/local/lib/python3.6/site-packages/pipenv/patched/piptools/repositories/pypi.py", line 153, in get_dependencies
    result = reqset._prepare_file(self.finder, ireq)
  File "/usr/local/lib/python3.6/site-packages/pipenv/patched/pip/req/req_set.py", line 523, in _prepare_file
    abstract_dist.prep_for_dist()
  File "/usr/local/lib/python3.6/site-packages/pipenv/patched/pip/req/req_set.py", line 134, in prep_for_dist
    self.req_to_install.run_egg_info()
  File "/usr/local/lib/python3.6/site-packages/pipenv/patched/pip/req/req_install.py", line 438, in run_egg_info
    command_desc='python setup.py egg_info')
  File "/usr/local/lib/python3.6/site-packages/pipenv/patched/pip/utils/__init__.py", line 667, in call_subprocess
    cwd=cwd, env=env)
  File "/usr/local/Cellar/python3/3.6.3/Frameworks/Python.framework/Versions/3.6/lib/python3.6/subprocess.py", line 709, in __init__
    restore_signals, start_new_session)
  File "/usr/local/Cellar/python3/3.6.3/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: '/bin/python': '/bin/python'

Моя оболочка была ЗШ. После установки LC_ALL и LANG в .zshrc все работает нормально. Но я не уверен, почему LANG / LC_ALL должен иметь какое-либо влияние на выбор интерпретатора Python.

@galuszkak это проблема конкретно на Mac из-за проблем с

Что касается PR, я думаю, нам нужно было подписать Нейт, позвольте мне связаться с ним в PR

Передайте system функции, в которую передается which , и передайте его переданной which .

Проблема @kennethreitz не решена, можете ли вы не закрывать то, что еще не исправлено. Проблема все еще воспроизводима.

нет движения в течение 30 дней. он вернется, если это важно

У меня с этим проблема на альпийских образах. Любое решение?

  • Python 3.6.2
  • pipenv, версия 8.2.6
Step 7/7 : RUN pipenv install --dev --system --verbose
 ---> Running in a3097251c098
Pipfile.lock (1b4750) out of date, updating to (6a9e01)…
Locking [dev-packages] dependencies…
Locking [packages] dependencies…
CRITICAL:pip.utils:Error [Errno 2] No such file or directory: '/bin/python': '/bin/python' while executing command python setup.py egg_info
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 722, in __call__
    return self.main(*args, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/click/core.py", line 697, in main
    rv = self.invoke(ctx)
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/click/core.py", line 1066, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/click/core.py", line 895, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/click/core.py", line 535, in invoke
    return callback(*args, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/pipenv/cli.py", line 1866, in install
    do_init(dev=dev, allow_global=system, ignore_pipfile=ignore_pipfile, system=system, skip_lock=skip_lock, verbose=verbose, concurrent=concurrent, deploy=deploy, pre=pre)
  File "/usr/local/lib/python3.6/site-packages/pipenv/cli.py", line 1325, in do_init
    do_lock(system=system, pre=pre)
  File "/usr/local/lib/python3.6/site-packages/pipenv/cli.py", line 1121, in do_lock
    pre=pre
  File "/usr/local/lib/python3.6/site-packages/pipenv/utils.py", line 461, in resolve_deps
    resolved_tree.update(resolver.resolve(max_rounds=PIPENV_MAX_ROUNDS))
  File "/usr/local/lib/python3.6/site-packages/pipenv/patched/piptools/resolver.py", line 102, in resolve
    has_changed, best_matches = self._resolve_one_round()
  File "/usr/local/lib/python3.6/site-packages/pipenv/patched/piptools/resolver.py", line 200, in _resolve_one_round
    for dep in self._iter_dependencies(best_match):
  File "/usr/local/lib/python3.6/site-packages/pipenv/patched/piptools/resolver.py", line 296, in _iter_dependencies
    dependencies = self.repository.get_dependencies(ireq)
  File "/usr/local/lib/python3.6/site-packages/pipenv/patched/piptools/repositories/pypi.py", line 153, in get_dependencies
    result = reqset._prepare_file(self.finder, ireq)
  File "/usr/local/lib/python3.6/site-packages/pipenv/patched/pip/req/req_set.py", line 639, in _prepare_file
    abstract_dist.prep_for_dist()
  File "/usr/local/lib/python3.6/site-packages/pipenv/patched/pip/req/req_set.py", line 134, in prep_for_dist
    self.req_to_install.run_egg_info()
  File "/usr/local/lib/python3.6/site-packages/pipenv/patched/pip/req/req_install.py", line 438, in run_egg_info
    command_desc='python setup.py egg_info')
  File "/usr/local/lib/python3.6/site-packages/pipenv/patched/pip/utils/__init__.py", line 667, in call_subprocess
    cwd=cwd, env=env)
  File "/usr/local/lib/python3.6/subprocess.py", line 709, in __init__
    restore_signals, start_new_session)
  File "/usr/local/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: '/bin/python': '/bin/python'

Это будет решено # 1097, если и когда он будет объединен

В выпуске

Пожалуйста, откройте проблему повторно.

Я могу воспроизвести это в последней версии (9.0.1), пожалуйста, откройте заново.

@jacebrowning благодарит за отчет, но это не было исправлено в 9.0.1, # 1005 не был объединен до выпуска 9.0.1. Попробуйте с мастером и посмотрите, решено ли это

Я только что попробовал, pip install git+git://github.com/pypa/pipenv.git@master и pipenv install --dev --system начали работать в моем образе python:3.6.3 docker. Можно ли сделать еще один релиз?

Я могу воспроизвести проблему в мастере. Несмотря на то, что он закрыт, PR # 1097, который, как предполагается, решает эту проблему, на самом деле не был объединен в мастер. Пожалуйста, откройте

Привет, я только что обнаружил эту проблему сегодня, есть ли другой способ использовать Pipenv в альпийском контейнере?

@LuRsT Я просто установил через git commit sha, в котором есть исправление.

На данный момент жду нового релиза.

RUN set -ex && pip install git+git://github.com/pypa/pipenv.git<strong i="8">@8378a1b104f2d817790a05da370bef0a1b00f452</strong>

РЕДАКТИРОВАТЬ: вам нужно будет установить git, чтобы это работало.

Круто, спасибо @sbdchd!

К сожалению, я все еще сталкиваюсь с этим в контейнерах python:3.6.3 и ubuntu:17.10 , причем здесь упоминаются все версии pipenv, включая версию, предложенную

Изменить: извините, это было немного бесполезно. Мне не удалось воссоздать его с помощью более минимального Dockerfile, так что это должно быть что-то конкретное (и, вероятно, глупое), которое я делаю. Я сообщу, если найду!

Вот Dockerfile, который я использую для разработчиков:

FROM python:3.6
ENV PYTHONUNBUFFERD 1

RUN apt-get update
RUN apt-get install netcat -y

# -- Install Pipenv:
RUN set -ex && pip install git+git://github.com/pypa/pipenv.git<strong i="6">@8378a1b104f2d817790a05da370bef0a1b00f452</strong>

# -- Install Application into container:
RUN set -ex && mkdir /app

WORKDIR /app

# -- Adding Pipfiles
COPY Pipfile Pipfile
COPY Pipfile.lock Pipfile.lock

# -- Install dependencies:
RUN set -ex && pipenv install --dev --system

WORKDIR /app

VOLUME ["/app"]

Спасибо за это. Как оказалось, ошибка в моем случае произошла при попытке создать файл блокировки. Я перевожу некоторые проекты из requirements.txt в данный момент, поэтому я устанавливал из этого в контейнер, пока возился. Учитывая, что это, вероятно, не рекомендуемый вариант использования, вероятно, не стоит слишком сильно беспокоиться?

Я добавил обходной путь, который довольно просто использовать в Docker в # 917. Комментарий https://github.com/pypa/pipenv/issues/917#issuecomment -375312947. Хотя это и не идеально, но я думаю, что это довольно просто. @mcgeeco; мой сценарий был похож на ваш, так что, может быть, вы найдете мою работу полезной?

Всем привет!

Та же проблема здесь с образами python:3.6 Docker и pipenv-11.9.0 .

Вот пример Dockerfile:

FROM python:3.6

WORKDIR /app
COPY . /app/

RUN pip install pipenv
RUN pipenv install --system

EXPOSE 8000

CMD ["python", "main.py"]

На данный момент я использую обходной путь @Jitsusama .

Спасибо.

То же самое здесь, все еще поражен этим.

Извините за продолжающиеся проблемы, ребята, у нас были проблемы с нашей тестовой инфраструктурой, но мы рассмотрим это

Привет, я использую последнюю версию библиотеки 11.10.0 и все еще вижу эту проблему. Базовый образ - ubuntu: xenial.

Step 12/22 : COPY Pipfile /tmp/
 ---> Using cache
 ---> 416d6b4f86bf
Step 13/22 : COPY Pipfile.lock.master /tmp/Pipefile.lock
 ---> 40a28443be72
Step 14/22 : RUN cd /tmp && pip3.6 install pipenv==11.10.0 
 ---> Running in 883b8a638d52
Collecting pipenv==11.10.0
  Downloading https://XYZ/api/pypi/pypi/packages/e5/fd/740a41c68c38262265d73191fb686f38d26c4ea1ea6080a65b2b626bedc7/pipenv-11.10.0-py3-none-any.whl (5.6MB)
Collecting virtualenv-clone>=0.2.5 (from pipenv==11.10.0)
  Downloading https://XYZ/api/pypi/pypi/packages/6d/c2/dccb5ccf599e0c5d1eea6acbd058af7a71384f9740179db67a9182a24798/virtualenv_clone-0.3.0-py2.py3-none-any.whl
Requirement already satisfied: setuptools>=36.2.1 in /usr/local/lib/python3.6/site-packages (from pipenv==11.10.0)
Collecting certifi (from pipenv==11.10.0)
  Downloading https://XYZ/api/pypi/pypi/packages/fa/53/0a5562e2b96749e99a3d55d8c7df91c9e4d8c39a9da1f1a49ac9e4f4b39f/certifi-2018.1.18-py2.py3-none-any.whl (151kB)
Requirement already satisfied: pip>=9.0.1 in /usr/local/lib/python3.6/site-packages (from pipenv==11.10.0)
Collecting virtualenv (from pipenv==11.10.0)
  Downloading https://XYZ/api/pypi/pypi/packages/ed/ea/e20b5cbebf45d3096e8138ab74eda139595d827677f38e9dd543e6015bdf/virtualenv-15.2.0-py2.py3-none-any.whl (2.6MB)
Installing collected packages: virtualenv-clone, certifi, virtualenv, pipenv
Successfully installed certifi-2018.1.18 pipenv-11.10.0 virtualenv-15.2.0 virtualenv-clone-0.3.0
 ---> c9e452fdc262
Removing intermediate container 883b8a638d52
Step 15/22 : RUN set -ex  && pipenv install --dev --system
 ---> Running in 8c23d30ef730
+ pipenv install --dev --system
Creating a Pipfile for this project…
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 722, in __call__
    return self.main(*args, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/click/core.py", line 697, in main
    rv = self.invoke(ctx)
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/click/core.py", line 1066, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/click/core.py", line 895, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/click/core.py", line 535, in invoke
    return callback(*args, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/pipenv/cli.py", line 366, in install
    selective_upgrade=selective_upgrade,
  File "/usr/local/lib/python3.6/site-packages/pipenv/core.py", line 1730, in do_install
    skip_requirements=skip_requirements,
  File "/usr/local/lib/python3.6/site-packages/pipenv/core.py", line 634, in ensure_project
    ensure_pipfile(validate=validate, skip_requirements=skip_requirements)
  File "/usr/local/lib/python3.6/site-packages/pipenv/core.py", line 288, in ensure_pipfile
    project.create_pipfile(python=python)
  File "/usr/local/lib/python3.6/site-packages/pipenv/project.py", line 557, in create_pipfile
    config_parser = ConfigOptionParser(name=self.name)
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/pip9/baseparser.py", line 149, in __init__
    assert self.name
AssertionError
The command '/bin/sh -c set -ex  && pipenv install --dev --system' returned a non-zero code: 1

@Ankitmaroo, извините за разочарование, как несколько человек упомянули в разных местах (я знаю, что сейчас есть что RUN cd а вы на самом деле используете WORKDIR /somedirectory потому что (в настоящее время идет рефакторинг) поиск пути (и, как следствие, поиск python) несколько ошибочен, когда вы пытаетесь сделать это из /

@techalchemy, к сожалению, я не могу это подтвердить. Мой минимальный Dockerfile:

FROM python:3.6-alpine3.7

ENV PYTHONUNBUFFERED=1

WORKDIR app/

COPY Pipfile* app/

RUN set -x \
    && pip install --upgrade pip setuptools wheel pipenv \
    && pipenv install --system --dev

и ошибка:

+ pipenv install --system --dev
Creating a Pipfile for this project…
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 722, in __call__
    return self.main(*args, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/click/core.py", line 697, in main
    rv = self.invoke(ctx)
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/click/core.py", line 1066, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/click/core.py", line 895, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/click/core.py", line 535, in invoke
    return callback(*args, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/pipenv/cli.py", line 366, in install
    selective_upgrade=selective_upgrade,
  File "/usr/local/lib/python3.6/site-packages/pipenv/core.py", line 1730, in do_install
    skip_requirements=skip_requirements,
  File "/usr/local/lib/python3.6/site-packages/pipenv/core.py", line 634, in ensure_project
    ensure_pipfile(validate=validate, skip_requirements=skip_requirements)
  File "/usr/local/lib/python3.6/site-packages/pipenv/core.py", line 288, in ensure_pipfile
    project.create_pipfile(python=python)
  File "/usr/local/lib/python3.6/site-packages/pipenv/project.py", line 585, in create_pipfile
    'python_version': python_version(required_python)[: len('2.7')]
TypeError: 'NoneType' object is not subscriptable

что такое же, как в # 1939.

Это установленные версии:

Successfully installed certifi-2018.1.18 pipenv-11.10.0 virtualenv-15.2.0 virtualenv-clone-0.3.0

Если вместо этого я привяжу двоичный файл python к символьной ссылке, все будет в порядке.

RUN set -x \
    && pip install --upgrade pip setuptools wheel pipenv \
    && ln -sf /usr/local/bin/python /bin/python \
    && pipenv install --system --dev

@Midnighter вы на самом деле копируете pipfile?

да

[[source]]
url = "https://pypi.python.org/simple"
verify_ssl = true
name = "pypi"

[packages]
Flask = "*"

[dev-packages]
pytest = "*"

[requires]
python_version = "3.6"

Согласитесь с @Midnighter. Тем не менее, вы увидите ту же ошибку, что и выше.

@ В середине ночи вы не можете установить WORKDIR в app/ а затем COPY Pipfile* app/ - это перемещает вас в /app а затем копирует Pipfile в /app/app что означает, что pipenv не находит Pipfile для работы. Я просто сделал это, и это сработало:

FROM python:3.6-alpine3.7

ENV PYTHONUNBUFFERED=1


COPY Pipfile* app/

WORKDIR app/

RUN set -x \
    && pip install --upgrade pip setuptools wheel pipenv \
    && pipenv install --system --dev

Какая у вас версия Docker? Вы правы, я допустил ошибку, упростив Dockerfile, но ни та версия, которую вы разместили здесь, ни другая версия у меня не работали.

Я на Docker version 17.09.0-ce, build afdb6d4 . Когда я пробую ваш Dockerfile выше, я получаю:

+ pipenv install --system --dev
Pipfile.lock not found, creating…
Locking [dev-packages] dependencies…
ython: not found

Когда использую так, как задумал изначально.

FROM python:3.6-alpine3.7

ENV PYTHONUNBUFFERED=1

WORKDIR /app

COPY Pipfile* /app/

RUN set -x \
    && pip install --upgrade pip setuptools wheel pipenv \
    && pipenv install --system --dev

Я получаю ту же ошибку.

  • убедитесь, что вы копируете файл блокировки
  • Я запустил именно тот файл докера, который вставил

Почему файл блокировки необходим для поиска исполняемого файла Python? Тем более что я даже не использую там флаг --deploy . Однако вы правы, что он работает с существующим файлом блокировки.

@Midnighter, потому что pipenv должен выполнять разрешение зависимостей, что означает, что он должен был заблокировать, если у него нет файла блокировки. Но если вы передадите —system он не сможет выполнить разрешение зависимостей - для этого требуется изолированная среда, а —system основном говорит: «Не создавайте virtualenv», что мы будем использовать для изоляции. Обмен сообщениями не очень хорош, но у меня есть некоторые изменения для этого.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги