Pipenv: Pipenv ne résout pas correctement --system python.

Créé le 31 oct. 2017  ·  46Commentaires  ·  Source: pypa/pipenv

Décrivez votre environnement
  1. Type de système d'exploitation Docker Alpine Python -> https://github.com/docker-library/python/blob/1d59eb2dd813c64891bf554a8ea01754aba25816/3.6/alpine3.6/Dockerfile
  2. Version Python : Python 3.6.3
  3. Version Pipenv : pipenv, version 8.3.1
Résultat attendu

Si je définis PIP_PYTHON_PATH, il est ignoré et remplacé par pipenv (ma question est pourquoi, quel est le raisonnement derrière cela?) Parce que https://github.com/kennethreitz/pipenv/blob/master/pipenv/utils.py#L367 variable lorsque j'utilise le drapeau --system . J'ai attrapé ce problème car lors de la création de mon image Docker, elle échouait sur pipenv install --system

Pourquoi je sais ça ? Parce qu'il y a une autre fonction qui ne fonctionne pas correctement.
```(Pdb) python_path
'/bin/python'
(Pdb) qui('python')
'/bin/python'
(Pdb) print(sys.executable)
'/usr/local/bin/python'

/ # /bin/python
sh : /bin/python : introuvable

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`

Résultat actuel

pipenv install --system installation de

Étapes à reproduire

pipenv install --system sur cette image docker échouera

Commentaire le plus utile

Le problème

Tous les 46 commentaires

@galuszkak c'est intéressant. Donc sys.executable est défini en fonction de pdb, mais nous ne transmettons pas le fait que vous avez utilisé —system lorsque nous appelons en fait which() , il essaie donc d'utiliser l'emplacement virtualenv du projet qui n'existe vraisemblablement pas. C'est l'invocation pertinente qui devrait être assez facile à corriger lorsque j'entre au bureau : https://github.com/kennethreitz/pipenv/blob/master/pipenv/utils.py#L406

Quant à savoir pourquoi nous faisons tout cela, c'est principalement pour que nous puissions tromper le résolveur de packages pip-fools pour résoudre les packages python pour des versions de python différentes de l'interpréteur actif

En utilisant ce Dockerifle, qui est basé sur celui engagé dans ce référentiel, je ne peux pas reproduire ce problème, sans dire qu'il n'existe pas, il semble que quelque chose se passe, achetez ce dockerfile semble fonctionner :

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 Je n'ai pas utilisé --deploy flag + Vous n'utilisez pas $ PIP_PYTHON_PATH qui est le problème d'origine ici qui est remplacé par pipenv.

@galuszkak Excuses ; Je comprends cela, je suppose que je ne sais pas pourquoi cela doit être défini dans ce cas. Nous devons absolument résoudre ce bug et le corriger. Je me demande simplement s'il se passe plus de choses avec docker alpine qui nécessitait la définition de PIP_PYTHON_PATH.

@erinxocon rien à excuser :), merci de vous pencher sur mon problème 👍 . Le correctif que je fournis dans #1005 fonctionne pour moi en ce moment.

Mais j'ai essayé votre image et cela fonctionne parfaitement bien avec le même ensemble de choses. Essayer de déterminer la cause de mon problème en premier lieu, car sam Pipfile et Pipfile.lock et les mêmes sons de fichier .env fonctionnent sur votre Dockerfile, et je ne vois pas de différence parce que je source la même image...

Compris @erinxocon ! Voici comment pouvez-vous reproduire cela :

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'

Semble être un problème avec l'utilisation de ONBUILD RUN vs juste RUN. N'étant pas un expert en docker, je vais devoir comprendre quelle est la différence entre eux.

@erinxocon Je ne pense pas que ce soit le problème. Dans l'exemple ci-dessus, je vous montre le problème à l'intérieur du conteneur en cours d'exécution et non sur une image de construction d'étape.

@erinxocon le problème est de définir la variable en premier lieu (qui n'a pas besoin d'être définie mais ce n'est pas la question) - en définissant PIP_PYTHON_PATH cela interrompt la fonctionnalité de résolution lorsque vous devez passer --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

Puisque @galuszkak utilise --system mais que allow_global n'est pas transmis par la copie de which qui est transmise au résolveur, mais il n'y a pas non plus de Project.virtualenv_location raison du drapeau --system , nous finissons par avoir simultanément :

  1. location est None
  2. Project.virtualenv_location est None ( location est toujours None )
  3. _pas_ allow_global
  4. p = os.sep.join([None] + ['bin/{0}'.format(python)])

C'est ainsi que nous nous retrouvons avec /bin/python comme tentative de commande.

@galuszkak Excuses, je n'ai pas vu l'indicateur -it sh passer dans votre exemple.

@techalchemy a du sens. Avez-vous un patch en préparation, ou dois-je m'en charger ?

@erinxocon @galuszkak a déjà écrit un patch (#1005) sur lequel @nateprewitt avait exprimé quelques inquiétudes mais je ne sais pas où cela le laisse

@erinxocon encore, rien d'excuse et vraiment merci d'avoir examiné mon problème.

Pouvons-nous être d'accord/pas d'accord sur la solution #1005 ? Je vais essayer de faire avancer la discussion sur ce PR.

Ce problème m'a encore frappé aujourd'hui, mais sur OS X dans des conditions totalement différentes. Trace de pile ci-dessous.

➜  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'

Ma coquille était ZSH. Après avoir défini LC_ALL et LANG dans .zshrc, tout fonctionne correctement. Mais je ne sais pas pourquoi LANG/LC_ALL devrait avoir un impact sur le choix de l'interpréteur python.

@galuszkak c'est spécifiquement un problème sur Mac en raison de problèmes de paramètres régionaux, j'essaierai de me souvenir demain pour retrouver un premier problème dans ce projet où Kenneth a discuté du problème avec la configuration du shell par défaut mais fondamentalement si votre paramètre régional n'est pas défini correctement python meurt horriblement

En ce qui concerne le PR, je pense que nous avions besoin de Nate pour signer, laissez-moi le contacter dans le PR

Transmettez system à la fonction, où which est transmis, et transmettez-le au which transmis.

Le problème

aucun mouvement en 30 jours. ça reviendra si c'est important

Je suis avec ce problème sur les images alpines. Toute solution?

  • Python 3.6.2
  • pipenv, version 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'

Cela sera résolu par #1097 si et quand il est fusionné

Le problème

Veuillez rouvrir le problème.

Je peux reproduire cela dans la dernière version (9.0.1), veuillez rouvrir.

@jacebrowning merci pour le rapport mais cela n'a pas été corrigé dans 9.0.1, #1005 n'a été fusionné qu'après la sortie de 9.0.1. Essayez avec le maître et voyez si c'est résolu

Je viens d'essayer, pip install git+git://github.com/pypa/pipenv.git@master et pipenv install --dev --system commencé à travailler dans mon image docker python:3.6.3 . Une autre sortie peut-elle être faite ?

Je peux reproduire le problème dans le master. Bien qu'il soit fermé, le PR #1097 qui supposait résoudre ce problème n'a en fait pas été fusionné dans le master. Veuillez rouvrir

Bonjour, je viens de découvrir ce problème aujourd'hui, existe-t-il une autre façon d'utiliser Pipenv dans un conteneur alpin ?

@LuRsT Je viens d'installer via le git commit sha, qui a le correctif.

Actuellement en attente d'une nouvelle version.

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

EDIT : vous devrez installer git pour que cela fonctionne.

Cool, merci @sbdchd !

Malheureusement, je rencontre toujours cela dans les conteneurs python:3.6.3 et ubuntu:17.10 , avec toutes les versions de pipenv mentionnées ici, y compris celle suggérée par @sbdchd .

Edit : Désolé, c'était un peu inutile. Je n'ai pas pu le recréer avec un Dockerfile plus minimal, donc ce doit être quelque chose de spécifique (et probablement stupide) que je fais. Je ferai un retour si je le trouve !

Voici le Dockerfile que j'utilise pour dev :

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"]

Merci pour ça. En fait, l'erreur dans mon cas se produisait lors de la tentative de création d'un fichier de verrouillage. Je suis en train de faire la transition de certains projets à partir de requirements.txt en ce moment, j'ai donc installé à partir de cela dans un conteneur tout en bricolant. Étant donné que ce n'est probablement pas un cas d'utilisation recommandé, cela ne vaut probablement pas la peine de trop s'inquiéter ?

J'ai ajouté une solution de contournement assez simple à utiliser dans Docker dans #917. Le commentaire est https://github.com/pypa/pipenv/issues/917#issuecomment -375312947. Bien que ce ne soit pas l'idéal, je pense que c'est assez simple. @mcgeeco; mon scénario était similaire au vôtre pour avoir voulu cela, alors peut-être que vous trouverez ma solution de contournement utile ?

Salut!

J'ai le même problème ici avec l'image Docker python:3.6 et pipenv-11.9.0 .

Voici un exemple de Dockerfile :

FROM python:3.6

WORKDIR /app
COPY . /app/

RUN pip install pipenv
RUN pipenv install --system

EXPOSE 8000

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

Pour l'instant, j'utilise la solution de contournement

Merci.

Idem ici, toujours touché par ça.

Désolé pour les problèmes en cours ici, nous avons eu des problèmes avec notre infrastructure de test, mais nous allons examiner cela

Bonjour, j'utilise la dernière version de la bibliothèque 11.10.0 et je vois toujours ce problème. L'image de base est 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 désolé pour la frustration, comme quelques personnes l'ont mentionné à divers endroits (je sais qu'il y a beaucoup de choses à couvrir maintenant), l'élément essentiel est de vous assurer que vous n'utilisez pas seulement RUN cd mais que vous utilisez en fait WORKDIR /somedirectory car (actuellement, refactorisation en cours) la recherche de chemin (et la recherche de python en conséquence) est quelque peu bogué lorsque vous essayez de le faire à partir de /

@techalchemy malheureusement, je ne peux pas le confirmer. Mon Dockerfile minimal :

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

et l'erreur :

+ 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

qui est le même que dans #1939.

Voici les versions installées :

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

Si à la place je relie symboliquement le binaire python, tout va bien.

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

@Midnighter, êtes-vous en train de copier un pipfile ?

Oui

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

[packages]
Flask = "*"

[dev-packages]
pytest = "*"

[requires]
python_version = "3.6"

D'accord avec @Midnighter. Pourtant, voyez la même erreur que ci-dessus.

@Midnighter, vous ne pouvez pas définir votre WORKDIR sur app/ puis COPY Pipfile* app/ -- cela vous déplace dans /app puis copie votre Pipfile dans /app/app ce qui signifie que pipenv ne trouve pas de Pipfile avec lequel travailler. J'ai simplement fait ceci et cela a fonctionné:

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

Tu es sur quelle version de Docker ? Vous avez raison, j'ai fait une erreur en simplifiant le Dockerfile mais ni la version que vous avez postée ici ni une autre version n'ont fonctionné pour moi.

Je suis sur Docker version 17.09.0-ce, build afdb6d4 . Lorsque j'essaie votre Dockerfile ci-dessus, j'obtiens :

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

Quand je l'utilise comme je l'avais prévu à l'origine.

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

J'ai la même erreur.

  • assurez-vous que vous copiez un fichier de verrouillage
  • J'ai exécuté le fichier docker exact que j'ai collé

Pourquoi un fichier de verrouillage est-il indispensable pour trouver l'exécutable Python ? Surtout que je n'utilise même pas le drapeau --deploy là-bas. Vous avez raison, cependant, que cela fonctionne avec un fichier de verrouillage existant.

@Midnighter car pipenv doit effectuer une résolution de dépendance, ce qui signifie qu'il devait se verrouiller à moins qu'il n'ait un fichier de verrouillage. Mais, si vous passez —system il ne peut pas faire de résolution de dépendance - cela nécessite un environnement isolé et —system dit essentiellement "ne pas faire de virtualenv", ce que nous utiliserions pour l'isolement. La messagerie n'est pas géniale, mais j'ai quelques changements pour cela.

Cette page vous a été utile?
0 / 5 - 0 notes