简体   繁体   English

如何在.ebextensions 中运行 Python 脚本?

[英]How do I run a Python script in .ebextensions?

My .ebextensions/00.commands.config looks like:我的.ebextensions/00.commands.config看起来像:

container_commands:
  00_download_models:
    command: "./download.py"

My download.py has:我的download.py有:

#!/usr/bin/env python3

print('now')

But in /var/log/cfn-init.log , I have:但是在/var/log/cfn-init.log中,我有:

2020-06-25 17:19:34,933 [ERROR] -----------------------BUILD FAILED!------------------------
2020-06-25 17:19:34,933 [ERROR] Unhandled exception during build: Command 00_download_models failed
Traceback (most recent call last):
  File "/opt/aws/bin/cfn-init", line 171, in <module>
    worklog.build(metadata, configSets)
  File "/usr/lib/python2.7/site-packages/cfnbootstrap/construction.py", line 129, in build
    Contractor(metadata).build(configSets, self)
  File "/usr/lib/python2.7/site-packages/cfnbootstrap/construction.py", line 530, in build
    self.run_config(config, worklog)
  File "/usr/lib/python2.7/site-packages/cfnbootstrap/construction.py", line 542, in run_config
    CloudFormationCarpenter(config, self._auth_config).build(worklog)
  File "/usr/lib/python2.7/site-packages/cfnbootstrap/construction.py", line 260, in build
    changes['commands'] = CommandTool().apply(self._config.commands)
  File "/usr/lib/python2.7/site-packages/cfnbootstrap/command_tool.py", line 117, in apply
    raise ToolError(u"Command %s failed" % name)
ToolError: Command 00_download_models failed

Seems pretty straight forward, so I don't know what I'm doing wrong.看起来很简单,所以我不知道我做错了什么。

There is nothing wrong with your script and technique, based on what you described.根据您的描述,您的脚本和技术没有任何问题

I verified it using my own EB Environment (64bit Amazon Linux 2 v3.0.3 running Python 3.7; single instance).我使用自己的 EB 环境(64 位 Amazon Linux 2 v3.0.3 运行 Python 3.7;单实例)对其进行了验证

To confirm, I used the following:为了确认,我使用了以下内容:

.ebextensions/50_commands.config .ebextensions/50_commands.config

container_commands:
  00_download_models:
    command: "./download.py"

./download.py was located in the root of my zip package (not in .ebextensions folder): ./download.py位于我的 zip package 的根目录中(不在.ebextensions文件夹中):

#!/usr/bin/env python3

# easier to find the /tmp/test.txt file then search though logs for "now"
with open('/tmp/test.txt', 'w') as f:
    f.write('from python script')

Also I made sure that ./download.py has execution permissions before creating EB environment by executing the following on my local workstation:此外,我通过在本地工作站上执行以下命令,确保./download.py在创建 EB 环境之前具有执行权限

chmod +x ./download.py

My download.py is:我的download.py是:

#!/usr/bin/env python3

import datetime
import torch
import torch.nn.functional as F
from transformers import (
    CTRLLMHeadModel,
    CTRLTokenizer,
    GPT2LMHeadModel,
    GPT2Tokenizer,
    TransfoXLLMHeadModel,
    TransfoXLTokenizer,
    XLMTokenizer,
    XLMWithLMHeadModel,
    XLNetLMHeadModel,
    XLNetTokenizer,
)

if __name__ == "__main__":
    with open('/tmp/test.txt', 'w') as f:
        f.write('Starting download', datetime.datetime.now().time(), '\n')
        GPT2LMHeadModel.from_pretrained('distilgpt2')
        f.write('DistilModel', datetime.datetime.now().time(), '\n')
        GPT2LMHeadModel.from_pretrained('gpt2-xl')
        f.write('GPT2-XL', datetime.datetime.now().time(), '\n')
        GPT2LMHeadModel.from_pretrained('gpt2-medium')
        f.write('GPT2-medium', datetime.datetime.now().time(), '\n')
        CTRLLMHeadModel.from_pretrained('ctrl')
        f.write('CTRL', datetime.datetime.now().time(), '\n')

        GPT2Tokenizer.from_pretrained('distilgpt2'),
        GPT2Tokenizer.from_pretrained('gpt2-xl'),
        GPT2Tokenizer.from_pretrained('gpt2-medium'),
        CTRLTokenizer.from_pretrained('ctrl')

        f.write('Finished download\n')

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM