Pipenv: Impossible d'exécuter un seul script python par pipenv pendant la construction de docker

Créé le 2 févr. 2018  ·  3Commentaires  ·  Source: pypa/pipenv

L'utilisation de pipenv run directory/somescript.py provoque l'échec de pipenv, car il recherche le répertoire/somescript.py dans PATH

Décrivez votre environnement
  1. Type de système d'exploitation Ubuntu
  2. Version Python : $ python -V python 3.6
  3. Version Pipenv : $ pipenv --version maître
Résultat attendu

pipenv exécute le script en utilisant l'environnement virtualn créé

Résultat actuel

Étape 26/29 : RUN ls $PROJECT_PATH | grep setup.py
---> Exécution en 7811236ec5ee
setup.py
Retrait du conteneur intermédiaire 7811236ec5ee
---> ba280fab02c3
Étape 27/29 : RUN pipenv run $PROJECT_PATH/setup.py develop
---> Exécution dans b48df28fbe12
Erreur : la commande /opt/project/setup.py n'a pas pu être trouvée dans PATH.

Étapes à reproduire

extrait du fichier docker :
RUN ls $PROJECT_PATH | grep setup.py
RUN pipenv run $PROJECT_PATH/setup.py develop

Commentaire le plus utile

@jacekjab, vous ne pouvez pas exécuter le shell pipenv à l'intérieur de Docker car il ne prend pas en charge les sous-shells comme indiqué dans le stacktrace. pipenv run est destiné aux scripts/applications installés sur le chemin avec un shebang spécifiant comment ils doivent être utilisés.

Dans votre cas, je pense que ce que vous recherchez est pipenv run python somescript.py ou ajoutez un shebang en haut du script.

Tous les 3 commentaires

Et changer Dockerfile en :

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

résulte 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')

Je suppose que vous pouvez probablement obtenir la même chose avec : pipenv run python -c "import this" (remplacez simplement import this par votre logique).

@jacekjab, vous ne pouvez pas exécuter le shell pipenv à l'intérieur de Docker car il ne prend pas en charge les sous-shells comme indiqué dans le stacktrace. pipenv run est destiné aux scripts/applications installés sur le chemin avec un shebang spécifiant comment ils doivent être utilisés.

Dans votre cas, je pense que ce que vous recherchez est pipenv run python somescript.py ou ajoutez un shebang en haut du script.

Cette page vous a été utile?
0 / 5 - 0 notes