Pipenv: Dockerのビルド中にpipenvで単一のPythonスクリプトを実行できません

作成日 2018年02月02日  ·  3コメント  ·  ソース: pypa/pipenv

pipenv run directory / somescript.pyを使用すると、PATHでdirectory / somescript.pyが検索されるため、pipenvが失敗します。

環境について説明してください
  1. OSタイプUbuntu
  2. Pythonバージョン: $ python -V python 3.6
  3. Pipenvバージョン: $ pipenv --versionマスター
期待される結果

pipenvは、作成された仮想環境を使用してスクリプトを実行します

実結果

ステップ26/29:run ls $ PROJECT_PATH | grep setup.py
---> 7811236ec5eeで実行
setup.py
中間コンテナの取り外し7811236ec5ee
---> ba280fab02c3
ステップ27/29:run pipenv run $ PROJECT_PATH / setup.pydevelop
---> b48df28fbe12で実行中
エラー:コマンド/opt/project/setup.pyがPATH内に見つかりませんでした。

複製する手順

dockerfileから抽出:
実行ls $ PROJECT_PATH | grep setup.py
RUN pipenv run $ PROJECT_PATH / setup.py development

最も参考になるコメント

@jacekjabスタックトレースに記載されているように、サブシェルをサポートしていないため、Docker内でpipenvシェルを実行することはできません。 pipenv runは、パスにインストールされたスクリプト/アプリケーションを対象としており、使用方法を指定するシバンが付いています。

あなたの場合、あなたが探しているのはpipenv run python somescript.pyか、スクリプトの先頭にシバンを追加すると思います。

全てのコメント3件

そして、Dockerfileを次のように変更します。

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

結果は

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

pipenv run python -c "import this"同じことを達成できると思います( import thisをロジックに置き換えるだけです)。

@jacekjabスタックトレースに記載されているように、サブシェルをサポートしていないため、Docker内でpipenvシェルを実行することはできません。 pipenv runは、パスにインストールされたスクリプト/アプリケーションを対象としており、使用方法を指定するシバンが付いています。

あなたの場合、あなたが探しているのはpipenv run python somescript.pyか、スクリプトの先頭にシバンを追加すると思います。

このページは役に立ちましたか?
0 / 5 - 0 評価