L'utilisation de pipenv run directory/somescript.py provoque l'échec de pipenv, car il recherche le répertoire/somescript.py dans PATH
$ python -V
python 3.6$ pipenv --version
maîtrepipenv exécute le script en utilisant l'environnement virtualn créé
É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.
extrait du fichier docker :
RUN ls $PROJECT_PATH | grep setup.py
RUN pipenv run $PROJECT_PATH/setup.py develop
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.
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.