【发布时间】:2019-07-04 17:41:53
【问题描述】:
我正在运行我的 AWS EC2 实例,当我尝试运行我的 Web 应用程序 MyCoolApp.py 时,我收到以下错误:
Traceback (most recent call last):
File "MyCoolApp.py", line 9, in <module>
import boto3
ImportError: No module named boto3
这是在我尝试启动我所做的应用程序之后,并且在我使用以下命令进行最新更改之前曾经这样做过:
[ec2-user@ip-XXX-XXX-XXX-XXX CoolApp]$ sudo python MyCoolApp.py
您可以猜到我正在尝试导入 Boto3 以供使用,我在我的 python 应用程序中使用以下代码在我的程序顶部执行此操作:
from werkzeug.security import check_password_hash, generate_password_hash
from datetime import datetime
import time, os, random, json
import urllib
import boto3
最后,因为我知道你会问这个,是的,我已经安装了 Boto3,当我运行 pip freeze 时,我可以看到它。这是下面的输出:
[ec2-user@ip-XXX-XXX-XXX-XXX CoolApp]$ pip freeze
alembic==0.9.9
aws-cfn-bootstrap==1.4
awscli==1.15.83
Babel==0.9.4
backports.ssl-match-hostname==3.4.0.2
blinker==1.4
boto==2.48.0
boto3==1.9.87
botocore==1.12.87
chardet==2.0.1
click==6.7
cloud-init==0.7.6
colorama==0.2.5
configobj==4.7.2
docutils==0.14
ecdsa==0.11
Flask==1.0.2
Flask-Login==0.4.1
Flask-Mail==0.9.1
Flask-Migrate==2.1.1
Flask-Mobility==0.1.1
Flask-SQLAlchemy==2.3.2
futures==3.2.0
hibagent==1.0.0
iniparse==0.3.1
itsdangerous==0.24
Jinja2==2.10
jmespath==0.9.3
jsonpatch==1.2
jsonpointer==1.0
kitchen==1.1.1
lockfile==0.8
Mako==1.0.7
MarkupSafe==1.0
mysql-connector-python==8.0.11
paramiko==1.15.1
PIL==1.1.6
pip-tools==3.3.2
ply==3.4
protobuf==3.5.2.post1
pyasn1==0.1.7
pycrypto==2.6.1
pycurl==7.19.0
pygpgme==0.3
pyliblzma==0.5.3
pystache==0.5.3
python-daemon==1.5.2
python-dateutil==2.7.3
python-editor==1.0.3
pyxattr==0.5.0
PyYAML==3.10
requests==1.2.3
rsa==3.4.1
s3transfer==0.1.13
simplejson==3.6.5
six==1.11.0
SQLAlchemy==1.2.7
urlgrabber==3.10
urllib3==1.24.1
virtualenv==15.1.0
Werkzeug==0.14.1
yum-metadata-parser==1.1.4
现在因为我怀疑有人会建议这个,所以我现在要阻止它。我将这些软件包全部安装到我的 --user 中。我没有使用虚拟环境,是的,我知道我应该使用,但我不认为我会需要一个,因为一切都在一台服务器上运行。是的,我承认这可能是一个错误,我在其他任何地方都使用它们,但如果我能在这个错误上得到一些帮助,那将不是重点。它在我的本地机器上启动并且运行良好,只是当我尝试在我的服务器上运行它时它失败了。
最后,如果这是由于与我的服务器上的软件包发生冲突,如果有人可以帮助我弄清楚如何删除它们,那就太好了,因为我在 AWS AMI Linux 上,所以将不胜感激。
【问题讨论】:
-
您使用
sudo运行脚本但没有使用pip freeze,并且您注意到您使用--user标志运行pip install。你是pip install --user是 root(即sudo)还是你本地的ec2-user? -
您使用的是 Python 2 还是 Python 3?确保调用
pip并且您的脚本使用相同的 Python 版本。 -
@Dunedan 我正在使用 Python 2.7。
-
@metatoaster 我不完全确定你在问什么,但我认为这是你的答案。我运行以下代码来安装
pip install --user -r requirements.txt我无法使用pip和sudo在同一行中运行任何东西,所以我使用--user标志进行安装。 -
因此,当您运行
sudo python MyCoolApp.py时,它将无法访问使用pip install --user安装的软件包,因为这些软件包安装在ec2-user本地(根据ec2-user@ip-...中包含的提示)你的日志)。sudo的行为以root用户身份运行脚本,因此它无法访问您的ec2-user用户本地 Python 包。
标签: python amazon-web-services boto3