Docker Alpine Python
-> https://github.com/docker-library/python/blob/1d59eb2dd813c64891bf554a8ea01754aba25816/3.6/alpine3.6/DockerfilePython 3.6.3
pipenv, version 8.3.1
Se eu definir PIP_PYTHON_PATH, ele é ignorado e substituído por pipenv (minha pergunta é por quê, qual é o raciocínio por trás disso?) Porque https://github.com/kennethreitz/pipenv/blob/master/pipenv/utils.py#L367 Ele está substituindo este ENV variável quando eu uso o sinalizador --system
. Eu peguei esse problema porque, ao construir minha imagem do docker, ela estava falhando em pipenv install --system
Por que eu sei disso? Porque há outra função que funciona incorretamente.
`` `(Pdb) python_path
'/ bin / python'
(Pdb) que ('python')
'/ bin / python'
(Pdb) imprimir (sys.executable)
'/ usr / local / bin / python'
/ # / bin / python
sh: / bin / python: não encontrado
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
deve instalar não falhou que / bin / python não foi encontrado.
pipenv install --system
nessa imagem do docker falhará
@galuszkak isso é interessante. Portanto, sys.executable
está definido de acordo com o pdb, mas não estamos passando o fato de que você usou —system
quando realmente chamamos which()
, então ele está tentando usar a localização virtualenv do projeto que provavelmente não existe. Esta é a invocação relevante que deve ser fácil de corrigir quando eu entrar no escritório: https://github.com/kennethreitz/pipenv/blob/master/pipenv/utils.py#L406
Quanto ao motivo de estarmos fazendo tudo isso, é principalmente para que possamos enganar o resolvedor de pacotes pip-fools para resolver pacotes python para versões de python que são diferentes do interpretador ativo
Usando este Dockerifle, que é baseado naquele comprometido com este repo, não consigo reproduzir este problema, não dizendo que não existe, parece que algo está acontecendo, compre este dockerfile parece funcionar:
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 Eu não usei --deploy flag + Você não está usando $ PIP_PYTHON_PATH, que é o problema original aqui, que foi substituído pelo pipenv.
@galuszkak Apologies; Eu entendo isso, acho que não sei por que isso precisa ser definido neste caso. Devemos definitivamente resolver esse bug e corrigi-lo. Só estou me perguntando se há algo mais acontecendo com o docker alpine que requer que o PIP_PYTHON_PATH seja definido.
@erinxocon nada a desculpar :), obrigado por olhar para o meu problema 👍. A correção que forneço no # 1005 está funcionando para mim agora.
Mas tentei sua imagem e está funcionando perfeitamente bem com o mesmo conjunto de coisas. Tentando ignorar o que está causando meu problema em primeiro lugar, porque sam Pipfile e Pipfile.lock e os mesmos sons de arquivo .env funcionam em Your Dockerfile, e não vejo diferença porque eu origem a mesma imagem ...
Entendi @erinxocon ! Aqui está como você pode reproduzir isso:
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'
Parece haver um problema com o uso de ONBUILD RUN em vez de apenas RUN. Não sendo um especialista em docker, terei de descobrir qual é a diferença entre eles.
@erinxocon Não acho que seja esse o problema. No exemplo acima, mostro o problema dentro do contêiner em execução, não em nenhuma imagem de construção de etapa.
@erinxocon o problema é com a configuração da variável em primeiro lugar (o que não precisa ser definido, mas isso não vem ao caso) - ao definir PIP_PYTHON_PATH
ele quebra a funcionalidade do resolvedor quando você precisa passar --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
Como @galuszkak está usando --system
mas allow_global
não é passado pela cópia de which
que é passada para o resolvedor, mas também não há Project.virtualenv_location
devido à bandeira --system
, acabamos tendo simultaneamente:
location
é None
Project.virtualenv_location
é None
( location
ainda é None
)allow_global
p = os.sep.join([None] + ['bin/{0}'.format(python)])
É assim que terminamos com /bin/python
como uma tentativa de comando.
@galuszkak Desculpas Não vi o sinalizador -it sh aprovado em seu exemplo.
@techalchemy faz sentido. Você tem um patch em andamento, ou devo assumir?
@erinxocon @galuszkak já escreveu um patch (# 1005) sobre o qual @nateprewitt expressou algumas preocupações, mas não tenho certeza de onde isso o deixa
@erinxocon de novo, nada a desculpar e muito obrigado por analisar meu problema.
Podemos concordar / discordar sobre # 1005 como uma solução? Vou tentar mover a discussão mais adiante nesse PR.
Este problema me atingiu novamente hoje, mas no OS X em condições totalmente diferentes. Rastreamento de pilha abaixo.
➜ 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'
Minha concha era ZSH. Depois de definir LC_ALL e LANG em .zshrc, tudo funciona bem. Mas não tenho certeza de por que LANG / LC_ALL deve ter qualquer impacto na escolha do interpretador Python.
@galuszkak é especificamente um problema no Mac por causa de problemas de localidade, tentarei me lembrar amanhã para rastrear um problema inicial neste projeto, onde Kenneth discutiu o problema com a configuração do shell padrão, mas basicamente se sua localidade não estiver configurada corretamente python morre horrivelmente
Quanto ao PR, acho que precisávamos que Nate assinasse, deixe-me falar com ele no PR
Passe system
para a função, onde which
está sendo passado, e passe-o para which
passado.
O problema de
nenhum movimento em 30 dias. ele vai voltar se for importante
Estou com esse problema em imagens alpinas. Qualquer solução?
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'
Isso será resolvido por # 1097 se e quando for mesclado
O problema de
Reabra o problema.
Posso reproduzir isso na versão mais recente (9.0.1), reabra.
@jacebrowning obrigado pelo relatório, mas isso não foi corrigido no 9.0.1, o # 1005 não foi mesclado até o lançamento do 9.0.1. Tente com o mestre e veja se está resolvido
Acabei de experimentar, pip install git+git://github.com/pypa/pipenv.git@master
e pipenv install --dev --system
começaram a trabalhar na minha imagem do docker de python:3.6.3
. Outra liberação pode ser feita?
Posso reproduzir o problema no master. Embora esteja fechado, o PR # 1097 que deveria resolver este problema não foi incorporado ao master. Por favor reabra
Olá, acabei de descobrir esse problema hoje. Existe outra maneira de usar o Pipenv em um contêiner alpino?
@LuRsT Acabei de instalar via git commit sha, que tem a correção.
Atualmente à espera de um novo lançamento.
RUN set -ex && pip install git+git://github.com/pypa/pipenv.git<strong i="8">@8378a1b104f2d817790a05da370bef0a1b00f452</strong>
EDIT: você precisará instalar o git para que isso funcione.
Legal, obrigado @sbdchd!
Infelizmente, ainda estou encontrando isso nos contêineres python:3.6.3
e ubuntu:17.10
, com todas as versões do pipenv mencionadas aqui, incluindo a sugerida por @sbdchd .
Edit: Desculpe, isso foi um pouco inútil. Não consegui recriá-lo com um Dockerfile mínimo, então deve ser algo específico (e provavelmente estúpido) que estou fazendo. Vou relatar de volta se eu encontrar!
Aqui está o Dockerfile que estou usando para 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"]
Obrigado por isso. Acontece que o erro no meu caso estava acontecendo ao tentar criar um arquivo de bloqueio. Estou fazendo a transição de alguns projetos de requirements.txt
no momento, então estava instalando em um contêiner enquanto tentava. Dado que este provavelmente não é um caso de uso recomendado, provavelmente não vale a pena se preocupar muito com isso?
Eu adicionei uma solução alternativa que é bastante simples de usar no Docker no # 917. O comentário é https://github.com/pypa/pipenv/issues/917#issuecomment -375312947. Embora não seja ideal, acho que é bastante simples. @mcgeeco; meu cenário era semelhante ao seu por querer isso, então talvez você ache minha solução útil?
Olá!
Acabei de ter o mesmo problema aqui com a imagem python:3.6
Docker e pipenv-11.9.0
.
Aqui está um exemplo do Dockerfile:
FROM python:3.6
WORKDIR /app
COPY . /app/
RUN pip install pipenv
RUN pipenv install --system
EXPOSE 8000
CMD ["python", "main.py"]
Por enquanto, estou usando uma solução alternativa para @Jitsusama .
Obrigado.
O mesmo aqui, ainda sendo atingido por isso.
Desculpe pelos problemas contínuos aqui, pessoal, tivemos alguns problemas com nossa infraestrutura de teste, mas vamos analisar isso
Olá, estou usando a versão mais recente da biblioteca 11.10.0 e continuo vendo esse problema. A imagem base é 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 desculpe a frustração, como algumas pessoas mencionaram em vários lugares (eu sei que há muito o que falar sobre isso agora), a parte crítica é ter certeza de que você não usará apenas RUN cd
mas que você realmente usa WORKDIR /somedirectory
porque (atualmente, refatorando em andamento) pathfinding (e encontrando python como resultado) é um tanto bugado quando você tenta fazê-lo de /
@techalchemy infelizmente, não posso confirmar isso. Meu Dockerfile mínimo:
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
e o erro:
+ 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
que é o mesmo que em # 1939.
Estas são as versões instaladas:
Successfully installed certifi-2018.1.18 pipenv-11.10.0 virtualenv-15.2.0 virtualenv-clone-0.3.0
Se, em vez disso, eu vincular simbolicamente o binário python, tudo estará bem.
RUN set -x \
&& pip install --upgrade pip setuptools wheel pipenv \
&& ln -sf /usr/local/bin/python /bin/python \
&& pipenv install --system --dev
@Midnighter você está realmente copiando um pipfile?
sim
[[source]]
url = "https://pypi.python.org/simple"
verify_ssl = true
name = "pypi"
[packages]
Flask = "*"
[dev-packages]
pytest = "*"
[requires]
python_version = "3.6"
Concorde com @Midnighter. Ainda assim, veja o mesmo erro acima.
@Midnighter você não pode definir seu WORKDIR
para app/
e então COPY Pipfile* app/
- isso move você para /app
e então copia seu Pipfile
em /app/app
que significa que pipenv
não encontrou um Pipfile com o qual trabalhar. Eu simplesmente fiz isso e funcionou:
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
Qual versão do Docker você está usando? Você está correto, cometi um erro ao simplificar o Dockerfile, mas nem a versão que você postou aqui nem outra versão funcionou para mim.
Estou em Docker version 17.09.0-ce, build afdb6d4
. Quando tento seu Dockerfile acima, obtenho:
+ pipenv install --system --dev
Pipfile.lock not found, creating…
Locking [dev-packages] dependencies…
ython: not found
Quando eu uso como pretendia originalmente.
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
Eu recebo o mesmo erro.
Por que um arquivo de bloqueio é um requisito para localizar o executável Python? Especialmente porque eu nem estou usando a bandeira --deploy
aqui. Você está certo, porém, que funciona com um arquivo de bloqueio existente.
@Midnighter porque o pipenv tem que fazer a resolução de dependências, o que significa que ele teve que travar a menos que tenha um lockfile. Mas, se você passar —system
ele não pode resolver a dependência - isso requer um ambiente isolado e —system
basicamente diz 'não faça um virtualenv' que é o que usaríamos para o isolamento. A mensagem não é boa, mas tenho algumas mudanças para isso.
Comentários muito úteis
O problema de