Pipenv: Kann einzelnes Python-Skript von pipenv während des Docker-Builds nicht ausführen

Erstellt am 2. Feb. 2018  ·  3Kommentare  ·  Quelle: pypa/pipenv

Die Verwendung von pipenv run directory/somescript.py führt dazu, dass pipenv fehlschlägt, da es nach directory/somescript.py in PATH sucht

Beschreiben Sie Ihre Umgebung
  1. Betriebssystemtyp Ubuntu
  2. Python-Version: $ python -V Python 3.6
  3. Pipenv-Version: $ pipenv --version Meister
Erwartetes Ergebnis

pipenv führt ein Skript mit der erstellten virtuellen Umgebung aus

Tatsächliche Ergebnis

Schritt 26/29: RUN ls $PROJECT_PATH | grep setup.py
---> Einlaufen in 7811236ec5ee
setup.py
Zwischenbehälter entfernen 7811236ec5ee
---> ba280fab02c3
Schritt 27/29: RUN pipenv ausführen $PROJECT_PATH/setup.py Develop
---> Läuft in b48df28fbe12
Fehler: Der Befehl /opt/project/setup.py konnte in PATH nicht gefunden werden.

Schritte zum Replizieren

Auszug aus Dockerfile:
AUSFÜHREN ls $PROJECT_PATH | grep setup.py
RUN pipenv ausführen $PROJECT_PATH/setup.py entwickeln

Hilfreichster Kommentar

@jacekjab Sie können die pipenv-Shell nicht innerhalb von Docker ausführen, da sie keine Sub-Shells unterstützt, wie im Stacktrace angegeben. pipenv run ist für Skripte/Anwendungen gedacht, die im Pfad mit einem Shebang installiert sind, der angibt, wie sie verwendet werden sollen.

In Ihrem Fall, glaube ich, suchen Sie nach pipenv run python somescript.py oder fügen Sie oben im Skript einen Shebang hinzu.

Alle 3 Kommentare

Und Dockerfile ändern in:

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

ergibt sich

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

Ich denke, Sie können wahrscheinlich dasselbe erreichen mit: pipenv run python -c "import this" (ersetzen Sie einfach import this durch Ihre Logik).

@jacekjab Sie können die pipenv-Shell nicht innerhalb von Docker ausführen, da sie keine Sub-Shells unterstützt, wie im Stacktrace angegeben. pipenv run ist für Skripte/Anwendungen gedacht, die im Pfad mit einem Shebang installiert sind, der angibt, wie sie verwendet werden sollen.

In Ihrem Fall, glaube ich, suchen Sie nach pipenv run python somescript.py oder fügen Sie oben im Skript einen Shebang hinzu.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen