Die Verwendung von pipenv run directory/somescript.py führt dazu, dass pipenv fehlschlägt, da es nach directory/somescript.py in PATH sucht
$ python -V
Python 3.6$ pipenv --version
Meisterpipenv führt ein Skript mit der erstellten virtuellen Umgebung aus
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.
Auszug aus Dockerfile:
AUSFÜHREN ls $PROJECT_PATH | grep setup.py
RUN pipenv ausführen $PROJECT_PATH/setup.py entwickeln
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.
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.