AWS的Elastic Beanstalk没有使用我的virtualenv:"没有名为boto"

时间:2014-04-29 02:25:47

标签: python django amazon-web-services virtualenv elastic-beanstalk

我正在尝试使用AWS的Elastic Beanstalk,但是当我运行eb start时,我得到“ImportError:没有名为boto的模块无法为本地存储库HEAD运行aws.push。”

我在Django项目的虚拟环境中。 我跑pip install boto并且成功了。 我做了pip freeze > requirements.txtgit add requirements.txtgit commit -m 'Added boto to requirements.txt',都成功了。 然后我进入python shell并导入boto而没有任何结果错误。 最后,我再次在正常命令行上运行eb start。相同的“没有名为boto的模块”错误。

似乎eb start命令没有使用我的virtualenv。我该怎么办?

2 个答案:

答案 0 :(得分:1)

好的,这是一个黑客,一个丑陋的,但它的确有效。

现在,错误发生在本地计算机上,与远程无关。

我在本地安装了boto,我没有使用virtualenv(出于我自己的原因,测试更准系统的方法)。

1注意错误发生的地方 - 在.git / AWSDevTools / aws / dev_tools.py

2运行非virtualenv python和

  
    
      

导入boto       打印boto。文件          /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/boto/的初始化 pyc文件

    
  

3打开dev_tools.py并将其添加到顶部:

导入系统    sys.path.append(" /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages")

由于你要附加到sys.path,如果git aws.push没有在自己的东西中找到它,你只会从该添加中导入模块。

现在修复了这个问题,除了它会在你执行" eb init"

的下一个目录上重新出现

4转到解压缩CLI的位置。就我而言:

$ cd~ / bin / AWS-ElasticBeanstalk-CLI-2.6.1

现在

5查找eb init

使用的dev_tools.py原文

$ find~ / bin -name dev_tools.py 〜/斌/ AWS-ElasticBeanstalk-CLI-2.6.1 / AWSDevTools / Linux的/脚本/ AWS / dev_tools.py

按#3

编辑此文件

如果你在别处做另一个eb init,你会发现你的丑陋黑客也在那里。

不太好,但确实有效。

P.S。抱歉格式化,新手在这里,已经很晚了,我想去滑冰。

答案 1 :(得分:0)

使用 eb push 我遇到了类似的问题。问题是 eb 在此过程中使用git将内容推送到AWS(git aws.push)。您可以在" .git / AWSDevTools /"中找到脚本。在您的存储库目录。

当git运行时,它会修改环境变量$ PATH并附加" / usr / libexec / git-core:/ usr / bin"到$ PATH的开头。这使得AWS脚本在virtualenv上使用/ usr / bin / python而不是python,而且没有安装boto。

我通过在AWS脚本之上添加一个包装器来修复此问题,该包装器验证是否启用了virtualenv并更正了$ PATH变量。

的.git / AWSDevTools / pre.aws.elasticbeanstalk.push

#!/bin/bash

if [ -n $VIRTUAL_ENV ]; then
    PATH=$VIRTUAL_ENV/bin:$PATH
fi

DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
python $DIR/aws.elasticbeanstalk.push

然后修改.git / config文件以使aws.push别名调用包装器

[alias "pre.aws.elasticbeanstalk"]  
    push = !.git/AWSDevTools/pre.aws.elasticbeanstalk.push

[alias "aws"]
    push = !git pre.aws.elasticbeanstalk.push  #Modified this line to call the wrapper