我正在尝试使用AWS的Elastic Beanstalk,但是当我运行eb start
时,我得到“ImportError:没有名为boto的模块无法为本地存储库HEAD运行aws.push。”
我在Django项目的虚拟环境中。
我跑pip install boto
并且成功了。
我做了pip freeze > requirements.txt
,git add requirements.txt
和git commit -m 'Added boto to requirements.txt'
,都成功了。
然后我进入python shell并导入boto而没有任何结果错误。
最后,我再次在正常命令行上运行eb start
。相同的“没有名为boto的模块”错误。
似乎eb start命令没有使用我的virtualenv。我该怎么办?
答案 0 :(得分:1)
好的,这是一个黑客,一个丑陋的,但它的确有效。
现在,错误发生在本地计算机上,与远程无关。
我在本地安装了boto,我没有使用virtualenv(出于我自己的原因,测试更准系统的方法)。
导入boto 打印boto。文件 /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/boto/的初始化强> pyc文件
导入系统 sys.path.append(" /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages")
由于你要附加到sys.path,如果git aws.push没有在自己的东西中找到它,你只会从该添加中导入模块。
现在修复了这个问题,除了它会在你执行" eb init"
的下一个目录上重新出现$ cd~ / bin / AWS-ElasticBeanstalk-CLI-2.6.1
现在
$ 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