Pipenv: Não é possível executar um único script python por pipenv durante a compilação do docker

Criado em 2 fev. 2018  ·  3Comentários  ·  Fonte: pypa/pipenv

Usar pipenv run directory / somescript.py faz com que pipenv falhe, porque ele procura o diretório / somescript.py em PATH

Descreva o seu ambiente
  1. Tipo de sistema operacional Ubuntu
  2. Versão Python: $ python -V python 3.6
  3. Versão do Pipenv: $ pipenv --version master
Resultado esperado

pipenv executa script usando ambiente virtualn criado

Resultado atual

Etapa 26/29: RUN ls $ PROJECT_PATH | grep setup.py
---> Executando em 7811236ec5ee
setup.py
Removendo o recipiente intermediário 7811236ec5ee
---> ba280fab02c3
Etapa 27/29: RUN pipenv execute $ PROJECT_PATH / setup.py developers
---> Executando em b48df28fbe12
Erro: o comando /opt/project/setup.py não foi encontrado no PATH.

Passos para replicar

extrair do dockerfile:
RUN ls $ PROJECT_PATH | grep setup.py
RUN pipenv run $ PROJECT_PATH / setup.py developers

Comentários muito úteis

@jacekjab você não pode executar pipenv shell dentro do Docker devido a ele não suportar subshells conforme observado no stacktrace. pipenv run se destina a scripts / aplicativos instalados no caminho com um guia especificando como eles devem ser usados.

No seu caso, acredito que o que você está procurando é pipenv run python somescript.py ou adicione um shebang ao início do script.

Todos 3 comentários

E alterando o Dockerfile para:

ENV SHELL=/bin/bash
RUN pipenv shell -c "$PROJECT_PATH/setup.py develop; exit $?"

resulta em

Spawning environment shell (/bin/bash). Use 'exit' to leave.
Traceback (most recent call last):
  File "/usr/local/bin/pipenv", line 11, in <module>
    load_entry_point('pipenv==9.0.3', 'console_scripts', 'pipenv')()
  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 2204, in shell
    do_shell(three=three, python=python, fancy=fancy, shell_args=shell_args)
  File "/usr/local/lib/python3.6/site-packages/pipenv/cli.py", line 2167, in do_shell
    c.interact(escape_character=None)
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/pexpect/pty_spawn.py", line 744, in interact
    mode = tty.tcgetattr(self.STDIN_FILENO)
termios.error: (25, 'Inappropriate ioctl for device')

Eu acho que você provavelmente pode conseguir o mesmo com: pipenv run python -c "import this" (apenas substitua import this por sua lógica).

@jacekjab você não pode executar pipenv shell dentro do Docker devido a ele não suportar subshells conforme observado no stacktrace. pipenv run se destina a scripts / aplicativos instalados no caminho com um guia especificando como eles devem ser usados.

No seu caso, acredito que o que você está procurando é pipenv run python somescript.py ou adicione um shebang ao início do script.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

jacebrowning picture jacebrowning  ·  3Comentários

fbender picture fbender  ·  3Comentários

randName picture randName  ·  3Comentários

erinxocon picture erinxocon  ·  3Comentários

leileigong picture leileigong  ·  3Comentários