Pipenv: No se puede ejecutar un solo script de python por pipenv durante la compilación de Docker

Creado en 2 feb. 2018  ·  3Comentarios  ·  Fuente: pypa/pipenv

El uso de pipenv run directory / somescript.py hace que pipenv falle, porque busca el directorio / somescript.py en PATH

Describe tu entorno
  1. Tipo de sistema operativo Ubuntu
  2. Versión de Python: $ python -V python 3.6
  3. Versión de Pipenv: $ pipenv --version master
Resultado Esperado

pipenv ejecuta el script utilizando el entorno virtualn creado

Resultado actual

Paso 26/29: EJECUTE ls $ PROJECT_PATH | grep setup.py
---> Ejecutando en 7811236ec5ee
setup.py
Extracción del recipiente intermedio 7811236ec5ee
---> ba280fab02c3
Paso 27/29: EJECUTAR pipenv ejecutar $ PROJECT_PATH / setup.py desarrollar
---> Ejecutando en b48df28fbe12
Error: el comando /opt/project/setup.py no se pudo encontrar dentro de PATH.

Pasos para replicar

extraer de dockerfile:
EJECUTAR ls $ PROJECT_PATH | grep setup.py
EJECUTAR pipenv ejecutar $ PROJECT_PATH / setup.py desarrollar

Comentario más útil

@jacekjab no puede ejecutar pipenv shell dentro de Docker debido a que no admite sub shells como se indica en stacktrace. pipenv run está diseñado para scripts / aplicaciones instaladas en la ruta con un shebang que especifica cómo deben usarse.

En su caso, creo que lo que está buscando es pipenv run python somescript.py o agregar un shebang en la parte superior del script.

Todos 3 comentarios

Y cambiando Dockerfile a:

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

resultados en

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

Supongo que probablemente puedas lograr lo mismo con: pipenv run python -c "import this" (simplemente reemplaza import this con tu lógica).

@jacekjab no puede ejecutar pipenv shell dentro de Docker debido a que no admite sub shells como se indica en stacktrace. pipenv run está diseñado para scripts / aplicaciones instaladas en la ruta con un shebang que especifica cómo deben usarse.

En su caso, creo que lo que está buscando es pipenv run python somescript.py o agregar un shebang en la parte superior del script.

¿Fue útil esta página
0 / 5 - 0 calificaciones